flowchart LR
D[Dados de entrada] --> P[Programa]
R[Regras escritas pelo programador] --> P
P --> S[Saída]
2 Conceitos básicos
2.1 Conjuntos
Conjuntos são uma linguagem para organizar objetos e raciocinar sobre coleções. Em Ciência da Computação, eles aparecem ao descrever usuários de um sistema, estados possíveis de um programa, símbolos de um alfabeto, resultados de uma consulta e exemplos de um conjunto de dados. Entender conjuntos ajuda a transformar frases como “selecione os registros válidos” ou “encontre elementos presentes nas duas listas” em operações matemáticas precisas.
2.1.1 Elementos, pertinência e representação
Um conjunto é uma coleção bem definida de objetos, chamados elementos. Escrevemos seus elementos entre chaves. Por exemplo,
\[ A = \{2,4,6,8\}. \]
A expressão \(4 \in A\) informa que \(4\) pertence a \(A\); já \(5 \notin A\) informa que \(5\) não pertence a \(A\). A ordem e a repetição não alteram um conjunto. Portanto,
\[ \{1,2,3\} = \{3,2,1\} = \{1,1,2,3\}. \]
Essa propriedade distingue conjuntos de estruturas como listas e vetores. A lista [1, 1, 2] possui três posições e preserva a ordem; o conjunto correspondente possui apenas os elementos \(\{1,2\}\). Linguagens como Python refletem essa diferença: list mantém ordem e repetições, enquanto set elimina duplicatas.

Um conjunto também pode ser descrito por uma propriedade. Em vez de listar todos os valores pares, escrevemos
\[ P = \{x \in \mathbb{Z} \mid x \text{ é par}\}. \]
O símbolo “\(\mid\)” significa “tal que”. Essa notação é útil quando o conjunto é muito grande ou infinito. O conjunto vazio, denotado por \(\varnothing\) ou \(\{\}\), não possui elemento algum. Atenção: \(\varnothing\) é diferente de \(\{\varnothing\}\), pois o segundo conjunto tem um elemento — o próprio conjunto vazio.
2.1.2 Conjuntos numéricos
Alguns conjuntos aparecem repetidamente na matemática aplicada à Computação:
- \(\mathbb{N} = \{0,1,2,3,\ldots\}\): números naturais, usados em contagens e índices;
- \(\mathbb{Z} = \{\ldots,-2,-1,0,1,2,\ldots\}\): números inteiros;
- \(\mathbb{Q}\): números racionais, que podem ser escritos como \(p/q\), com \(p,q \in \mathbb{Z}\) e \(q \neq 0\);
- \(\mathbb{R}\): números reais, comuns em medições, probabilidades e parâmetros de modelos.
Existe uma cadeia de inclusões:
\[ \mathbb{N} \subseteq \mathbb{Z} \subseteq \mathbb{Q} \subseteq \mathbb{R}. \]
Isso significa, por exemplo, que todo número natural também é inteiro e real. Os números irracionais, como \(\sqrt{2}\) e \(\pi\), pertencem a \(\mathbb{R} \setminus \mathbb{Q}\).
2.1.3 Subconjuntos e igualdade
Dizemos que \(A\) é subconjunto de \(B\), e escrevemos \(A \subseteq B\), quando todo elemento de \(A\) também pertence a \(B\). Se \(A \subseteq B\) e \(A \neq B\), então \(A\) é um subconjunto próprio de \(B\), indicado por \(A \subset B\).
Dois conjuntos são iguais quando possuem exatamente os mesmos elementos. Uma maneira comum de provar \(A=B\) é demonstrar as duas inclusões: \(A \subseteq B\) e \(B \subseteq A\). Essa estratégia, chamada dupla inclusão, é análoga a verificar duas condições lógicas em vez de comparar apenas a aparência das representações.
2.1.4 Operações entre conjuntos
Considere \(A=\{1,2,3,4\}\) e \(B=\{3,4,5\}\). As principais operações são:
- união: \(A \cup B = \{1,2,3,4,5\}\) reúne elementos presentes em \(A\) ou em \(B\);
- interseção: \(A \cap B = \{3,4\}\) mantém elementos presentes em \(A\) e em \(B\);
- diferença: \(A \setminus B = \{1,2\}\) mantém elementos de \(A\) que não pertencem a \(B\);
- diferença simétrica: \(A \triangle B = \{1,2,5\}\) mantém elementos que pertencem a apenas um dos conjuntos.
Se \(A \cap B=\varnothing\), os conjuntos são chamados disjuntos. Em um universo \(U\), o complemento de \(A\) é \(A^c=U\setminus A\): tudo que está no universo considerado, mas não em \(A\). O universo precisa ser declarado, pois o complemento muda conforme o domínio do problema.
Essas operações correspondem diretamente a tarefas computacionais: remover duplicatas, filtrar dados, combinar resultados e localizar itens em comum. Em bancos de dados, UNION, INTERSECT e EXCEPT expressam ideias equivalentes. Em Python, para conjuntos A e B, podemos usar A | B, A & B e A - B.

As leis de De Morgan relacionam operações e complementos:
\[ (A \cup B)^c = A^c \cap B^c \qquad\text{e}\qquad (A \cap B)^c = A^c \cup B^c. \]
Elas aparecem na simplificação de condições booleanas. Negar “\(x\) está em \(A\) ou em \(B\)” equivale a afirmar que “\(x\) não está em \(A\) e não está em \(B\)”.
2.1.5 Cardinalidade e conjunto das partes
A cardinalidade \(|A|\) é o número de elementos de um conjunto finito. Se \(A=\{a,b,c\}\), então \(|A|=3\). Para conjuntos finitos,
\[ |A \cup B| = |A| + |B| - |A \cap B|. \]
Subtraímos a interseção porque seus elementos foram contados duas vezes. Essa fórmula é o caso mais simples do princípio da inclusão-exclusão, usado em contagem e análise combinatória.
O conjunto das partes \(\mathcal{P}(A)\) contém todos os subconjuntos de \(A\). Para \(A=\{0,1\}\),
\[ \mathcal{P}(A)=\{\varnothing,\{0\},\{1\},\{0,1\}\}. \]
Se \(|A|=n\), então \(|\mathcal{P}(A)|=2^n\). Cada elemento pode ser incluído ou não em um subconjunto, exatamente como um bit pode assumir \(1\) ou \(0\). Por isso, subconjuntos podem ser representados por máscaras de bits: para \(A=\{a,b,c\}\), a máscara 101 representa \(\{a,c\}\).
2.1.6 Produto cartesiano
O produto cartesiano de \(A\) e \(B\) é o conjunto de todos os pares ordenados possíveis:
\[ A \times B = \{(a,b) \mid a \in A \text{ e } b \in B\}. \]
Se \(A=\{1,2\}\) e \(B=\{x,y\}\), então
\[ A \times B=\{(1,x),(1,y),(2,x),(2,y)\}. \]
A ordem importa: em geral, \((a,b)\neq(b,a)\). Se \(A\) e \(B\) são finitos, \(|A\times B|=|A|\,|B|\). Em Computação, produtos cartesianos modelam coordenadas, combinações de parâmetros, estados compostos e linhas produzidas por um CROSS JOIN. Quando \(B=A\), usamos \(A^2\); assim, \(\mathbb{R}^2\) representa o plano e \(\mathbb{R}^3\) representa o espaço tridimensional.
Considere \(U=\{1,2,3,4,5,6\}\), \(A=\{1,2,3,4\}\) e \(B=\{2,4,6\}\). Calcule \(A\cap B\), \(A\cup B\), \(A\setminus B\) e \(B^c\) em relação a \(U\). Depois, represente \(A\cap B\) como um conjunto em Python e teste se 3 pertence ao resultado.
2.2 Funções
Funções são uma das linguagens fundamentais da Matemática e da Ciência da Computação. Elas aparecem quando um programa transforma uma entrada em uma saída, quando um banco de dados associa uma chave a um registro, quando um classificador atribui um rótulo a uma imagem ou quando uma rede neural converte um vetor de atributos em probabilidades. Em todos esses casos existe a mesma ideia: para cada entrada admissível, há uma saída bem determinada.
2.2.1 Definição e notação
Sejam \(X\) e \(Y\) dois conjuntos. Uma função \(f\) de \(X\) em \(Y\) é uma regra que associa a cada elemento \(x \in X\) exatamente um elemento \(y \in Y\). Escrevemos
\[ f \colon X \to Y, \qquad x \mapsto f(x). \]
Nessa notação:
- \(X\) é o domínio, isto é, o conjunto das entradas permitidas;
- \(Y\) é o contradomínio, o conjunto no qual declaramos que as saídas estão;
- \(x\) é um argumento ou uma entrada;
- \(f(x)\) é o valor da função ou a saída correspondente a \(x\).
A palavra “exatamente” é essencial. Uma entrada do domínio não pode ficar sem saída e também não pode possuir duas saídas diferentes. Nada impede, entretanto, que duas entradas distintas produzam a mesma saída. Por exemplo, para \(f(x)=x^2\), temos \(f(2)=f(-2)=4\).
Na programação, a assinatura de uma função expressa ideia semelhante à notação matemática. A declaração conceitual
quadrado : Real -> Real
corresponde a \(q \colon \mathbb{R} \to \mathbb{R}\), \(q(x)=x^2\). O tipo de entrada descreve o domínio esperado, enquanto o tipo de retorno descreve o contradomínio. A analogia não é perfeita: uma função matemática não altera estado, não realiza entrada e saída e sempre associa o mesmo valor à mesma entrada. Em computação, funções com essas propriedades são frequentemente chamadas de funções puras.
Uma função pode ser descrita por uma fórmula, uma tabela, um algoritmo ou uma regra verbal. O que a caracteriza é a associação inequívoca entre entradas e saídas, e não a forma usada para apresentá-la.
2.2.2 Domínio, contradomínio e imagem
A imagem de \(f\) é o conjunto das saídas que a função realmente produz:
\[ \operatorname{im}(f)=\{f(x) \mid x\in X\}. \]
Sempre vale \(\operatorname{im}(f)\subseteq Y\), mas a inclusão pode ser estrita. Considere
\[ q \colon \mathbb{R}\to\mathbb{R}, \qquad q(x)=x^2. \]
O contradomínio declarado é \(\mathbb{R}\), porém nenhum número negativo é produzido. Logo,
\[ \operatorname{im}(q)=[0,\infty). \]
Essa distinção importa em computação. Um tipo de retorno pode permitir muitos valores, embora uma implementação produza apenas parte deles. Também importa para decidir se uma função possui inversa.
Quando uma fórmula é apresentada sem domínio explícito, costuma-se adotar o maior subconjunto dos reais em que a expressão faz sentido. Assim,
\[ r(x)=\frac{1}{x(x-3)} \]
tem domínio \(\mathbb{R}\setminus\{0,3\}\), pois divisão por zero não está definida. Já \(s(x)=\sqrt{x}\), como função real, tem domínio \([0,\infty)\). Em um programa, tentar avaliar essas expressões fora do domínio pode provocar uma exceção, um valor especial como NaN ou um resultado pertencente a outro sistema numérico, como os complexos.
2.2.3 Diferentes maneiras de representar uma função
Uma mesma função pode ser apresentada de várias formas, cada uma conveniente para um tipo de problema.
2.2.3.1 Fórmula
Uma fórmula descreve diretamente como calcular a saída. Na queda livre ideal, partindo do repouso, a distância percorrida após \(t\) segundos é
\[ s(t)=\frac{1}{2}gt^2, \qquad t\geq 0, \]
em que \(g\approx 9{,}8\,\mathrm{m/s^2}\). Por exemplo, \(s(2)=19{,}6\,\mathrm{m}\). A fórmula deixa evidente a dependência entre tempo e distância.
2.2.3.2 Tabela ou dicionário
Uma função sobre um conjunto finito pode ser armazenada como tabela. Um sistema pode associar extensões de arquivos aos respectivos tipos:
| Entrada | Saída |
|---|---|
.png |
imagem |
.qmd |
documento Quarto |
.py |
código Python |
Essa representação é semelhante a um dicionário ou mapa em uma linguagem de programação: uma chave válida determina um único valor.
2.2.3.3 Algoritmo
Algumas funções são descritas mais naturalmente por uma sequência de instruções. A função que informa se um inteiro é par pode ser definida por
def eh_par(n: int) -> bool:
return n % 2 == 0Matematicamente, ela tem a forma
\[ \operatorname{par}\colon\mathbb{Z}\to\{\text{falso},\text{verdadeiro}\}. \]
O código é uma implementação da regra matemática. Diferentes algoritmos podem implementar a mesma função, com custos diferentes de tempo e memória.
2.2.3.4 Gráfico
Para funções reais de uma variável real, o gráfico é o conjunto
\[ G_f=\{(x,f(x))\mid x\in X\}. \]
Cada entrada \(x\) determina um ponto de altura \(f(x)\). O teste da reta vertical fornece uma verificação visual: se alguma reta vertical intercepta a curva em mais de um ponto, a relação desenhada não representa \(y\) como função de \(x\).
Um gráfico revela tendências, máximos, mínimos e descontinuidades, mas uma figura amostrada não substitui a definição exata. Em computação gráfica, unir pontos calculados pode esconder oscilações ou descontinuidades existentes entre as amostras.
2.2.4 Funções de várias variáveis
Entradas computacionais frequentemente são vetores, e não números isolados. Uma função que estima a nota final usando prova e projeto pode ser escrita como
\[ n \colon [0,10]^2\to[0,10], \qquad n(p,j)=0{,}6p+0{,}4j. \]
O argumento é o par \((p,j)\). De modo geral, modelos de aprendizado de máquina recebem vetores
\[ \mathbf{x}=(x_1,x_2,\ldots,x_d)\in\mathbb{R}^d \]
e produzem uma saída \(f(\mathbf{x})\). Em classificação binária, por exemplo, pode-se ter \(f\colon\mathbb{R}^d\to\{-1,+1\}\); em classificação com \(k\) classes, uma saída comum é um vetor de \(k\) probabilidades.
2.2.5 Funções totais e parciais
Pela definição adotada, \(f\colon X\to Y\) precisa fornecer uma saída para todo \(x\in X\); dizemos que ela é total em \(X\). Em computação, contudo, operações podem falhar ou não terminar. A busca por uma chave inexistente, a divisão por zero ou um algoritmo que entra em laço infinito comportam-se como funções parciais.
Há duas maneiras usuais de modelar esse fato. Podemos restringir o domínio às entradas válidas ou ampliar o contradomínio com um valor que represente ausência ou erro. Por exemplo,
\[ \operatorname{buscar}\colon K\to V\cup\{\bot\}, \]
em que \(\bot\) significa “valor não encontrado”. Tipos como Option, Maybe e Result tornam essa possibilidade explícita e ajudam o compilador a exigir o tratamento do caso excepcional.
2.2.6 Propriedades importantes
Seja \(f\colon X\to Y\).
- \(f\) é injetora quando entradas diferentes produzem saídas diferentes: \[x_1\neq x_2 \Longrightarrow f(x_1)\neq f(x_2).\]
- \(f\) é sobrejetora quando todo elemento do contradomínio é atingido: \[\operatorname{im}(f)=Y.\]
- \(f\) é bijetora quando é simultaneamente injetora e sobrejetora.
Uma função hash comum ilustra a ausência de injetividade: o conjunto de entradas possíveis costuma ser muito maior do que o conjunto de códigos produzidos, portanto colisões são inevitáveis. Já uma codificação reversível precisa preservar informação suficiente para que entradas distintas não se confundam.
2.2.7 Composição de funções
Considere funções compatíveis
\[ f\colon X\to Y \qquad\text{e}\qquad g\colon Y\to Z. \]
A composição de \(g\) com \(f\) é a função
\[ g\circ f\colon X\to Z, \qquad (g\circ f)(x)=g(f(x)). \]
Primeiro aplicamos \(f\) e, depois, aplicamos \(g\) ao resultado. A ordem de leitura da expressão, portanto, é da direita para a esquerda.
Por exemplo, sejam \(f(x)=2x+1\) e \(g(y)=y^2\). Então
\[ (g\circ f)(x)=g(2x+1)=(2x+1)^2, \]
enquanto
\[ (f\circ g)(x)=f(x^2)=2x^2+1. \]
Em geral, \(g\circ f\neq f\circ g\). A composição também só faz sentido quando as saídas da primeira etapa são entradas válidas para a segunda. Essa verificação corresponde, em programação, à compatibilidade entre tipos em um pipeline.
def normalizar(texto: str) -> str:
return texto.strip().lower()
def comprimento(texto: str) -> int:
return len(texto)
def tamanho_normalizado(texto: str) -> int:
return comprimento(normalizar(texto))Nesse exemplo, normalizar produz uma cadeia de caracteres, exatamente o tipo aceito por comprimento. A função tamanho_normalizado implementa a composição \(\operatorname{comprimento}\circ\operatorname{normalizar}\).
A composição é associativa: quando os tipos são compatíveis,
\[ h\circ(g\circ f)=(h\circ g)\circ f. \]
Essa propriedade permite construir sistemas complexos a partir de módulos menores, como ocorre em compiladores, fluxos de processamento de dados e camadas de redes neurais.
2.2.8 Função identidade
Para qualquer conjunto \(X\), a função identidade é definida por
\[ \operatorname{id}_X\colon X\to X, \qquad \operatorname{id}_X(x)=x. \]
Ela não modifica a entrada e funciona como elemento neutro da composição:
\[ f\circ\operatorname{id}_X=f \qquad\text{e}\qquad \operatorname{id}_Y\circ f=f. \]
Embora pareça trivial, a identidade é útil para expressar interfaces uniformes, etapas opcionais de pipelines e conexões residuais em redes neurais.
2.2.9 Função inversa
Uma função \(f\colon X\to Y\) possui uma inversa \(f^{-1}\colon Y\to X\) quando podemos desfazer sua ação sem ambiguidade:
\[ f^{-1}(f(x))=x \quad\text{para todo }x\in X \]
e
\[ f(f^{-1}(y))=y \quad\text{para todo }y\in Y. \]
Isso acontece exatamente quando \(f\) é bijetora. A injetividade garante que a saída identifica uma única entrada; a sobrejetividade garante que toda saída declarada pode ser invertida.
Por exemplo,
\[ f\colon\mathbb{R}\to\mathbb{R}, \qquad f(x)=2x+1 \]
é bijetora. Para encontrar a inversa, escrevemos \(y=2x+1\) e isolamos \(x\):
\[ x=\frac{y-1}{2}. \]
Logo,
\[ f^{-1}(y)=\frac{y-1}{2}. \]
Podemos conferir compondo as duas funções:
\[ f^{-1}(f(x))=\frac{(2x+1)-1}{2}=x. \]
Já \(q(x)=x^2\) não é injetora em \(\mathbb{R}\), porque \(q(x)=q(-x)\). Ao restringir o domínio a \([0,\infty)\) e usar o contradomínio \([0,\infty)\), obtemos uma bijeção cuja inversa é \(q^{-1}(y)=\sqrt{y}\). Portanto, a invertibilidade não depende apenas da fórmula; depende também do domínio e do contradomínio.
Geometricamente, os gráficos de \(f\) e \(f^{-1}\) são reflexos um do outro em relação à reta \(y=x\). Computacionalmente, inverter uma transformação significa recuperar a entrada a partir da saída. Criptografia reversível, serialização sem perdas e mudanças de coordenadas exploram essa ideia; já compressão com perdas e funções hash descartam informação e, por isso, não admitem inversão perfeita.
\(f^{-1}\) indica a função inversa, enquanto \(1/f\) indica a função recíproca, \((1/f)(x)=1/f(x)\). São conceitos diferentes. Por exemplo, se \(f(x)=2x\), então \(f^{-1}(x)=x/2\), mas \((1/f)(x)=1/(2x)\).
2.2.10 Funções em aprendizado de máquina
Um modelo preditivo é uma função parametrizada. Escrevemos
\[ h_{\mathbf{w}}\colon X\to Y, \]
em que \(\mathbf{w}\) representa os parâmetros aprendidos a partir dos dados. Durante o treinamento, um algoritmo modifica \(\mathbf{w}\); depois do treinamento, o modelo recebe uma entrada e calcula uma saída.
Uma camada linear, por exemplo, transforma um vetor \(\mathbf{x}\in\mathbb{R}^d\) em
\[ f(\mathbf{x})=W\mathbf{x}+\mathbf{b}. \]
Uma rede neural é obtida pela composição de várias transformações. Em uma arquitetura simples,
\[ h=f_3\circ f_2\circ f_1. \]
A entrada passa primeiro por \(f_1\), depois por \(f_2\) e finalmente por \(f_3\). Assim, domínio, contradomínio, composição e imagem não são apenas abstrações: eles descrevem diretamente como dados percorrem um sistema computacional.
2.2.11 Exercícios de fixação
- Para \(f\colon\mathbb{Z}\to\mathbb{Z}\), \(f(n)=2n+1\), determine \(f(0)\), \(f(-3)\) e a imagem de \(f\). A função é sobrejetora no contradomínio declarado?
- Explique por que a relação que associa uma pessoa a todos os seus números de telefone não é, sem uma convenção adicional, uma função com contradomínio formado por números individuais. Como você alteraria o contradomínio?
- Sejam \(f(x)=x-1\) e \(g(x)=3x\). Calcule \((g\circ f)(2)\) e \((f\circ g)(2)\).
- Determine um domínio e um contradomínio para os quais \(f(x)=1/x\) seja bijetora e encontre sua inversa.
- Dê um exemplo de operação de programação que seja parcial. Modele-a como uma função total acrescentando ao contradomínio um valor de erro.
- Considere um modelo \(h\colon\mathbb{R}^{784}\to\mathbb{R}^{10}\). Interprete as dimensões de entrada e saída no contexto da classificação de imagens de algarismos com \(28\times28\) pixels.
2.3 Algarismos
Números são objetos abstratos; algarismos são símbolos usados para representá-los. O número doze, por exemplo, pode ser escrito como \(12\) no sistema decimal, \(1100\) no sistema binário ou \(\mathrm{C}\) no sistema hexadecimal. As três escritas representam a mesma quantidade, assim como as palavras “doze” e “twelve” expressam a mesma ideia em idiomas diferentes.
Para um estudante de Ciência da Computação, distinguir o número de sua representação é fundamental. Computadores armazenam sequências de bits, mas programas podem exibir essas sequências em decimal, hexadecimal, como caracteres, cores ou instruções. O significado depende da interpretação escolhida.
2.3.1 Sistemas de numeração posicionais
Um sistema de numeração de base \(b\) utiliza \(b\) algarismos diferentes, com valores entre \(0\) e \(b-1\). A posição de cada algarismo determina por qual potência da base ele será multiplicado. Para uma sequência inteira
\[ (a_na_{n-1}\ldots a_1a_0)_b, \]
seu valor é
\[ \sum_{i=0}^{n}a_i b^i, \qquad 0\leq a_i<b. \]
O algarismo mais à direita ocupa a posição \(0\) e tem peso \(b^0=1\). À medida que caminhamos para a esquerda, os pesos são multiplicados sucessivamente pela base.
No sistema decimal, a base é \(10\) e os algarismos disponíveis são \(0,1,\ldots,9\). Assim,
\[ (321)_{10}=3\cdot10^2+2\cdot10^1+1\cdot10^0. \]
Os parênteses e o índice indicam explicitamente a base. Quando não houver risco de ambiguidade, omitiremos o índice decimal.
O zero exerce dois papéis importantes: pode representar a quantidade nula e também reservar uma posição. Em \(205\), o zero informa que não há dezenas; sem ele, \(25\) representaria outro número.
Um hodômetro é um contador posicional. Quando uma roda completa todos os símbolos disponíveis, ela retorna a zero e produz um “vai um” para a roda à esquerda. Em base \(10\), isso ocorre após dez estados; em base \(2\), após apenas dois.
2.3.2 Parte fracionária
Posições à direita do separador representam potências negativas da base. Em base \(b\),
\[ (a_na_{n-1}\ldots a_0,a_{-1}a_{-2}\ldots)_b =\sum_{i=-m}^{n}a_i b^i. \]
Por exemplo,
\[ (321,34)_{10} =3\cdot10^2+2\cdot10^1+1\cdot10^0 +3\cdot10^{-1}+4\cdot10^{-2}. \]
Em notação brasileira usamos vírgula como separador decimal. Linguagens de programação normalmente exigem ponto, como em 321.34.
2.3.3 Base binária
O sistema binário tem base \(2\) e utiliza somente os algarismos \(0\) e \(1\). Cada algarismo binário é chamado de bit, contração de binary digit. Os pesos das posições inteiras são
\[ \ldots,2^5,2^4,2^3,2^2,2^1,2^0 =\ldots,32,16,8,4,2,1. \]
Para converter uma representação binária em decimal, somamos os pesos das posições que contêm \(1\). Por exemplo,
\[ (1101)_2 =1\cdot2^3+1\cdot2^2+0\cdot2^1+1\cdot2^0 =8+4+0+1 =(13)_{10}. \]
O binário é apropriado para circuitos digitais porque dois estados físicos distinguíveis podem representar \(0\) e \(1\): tensão baixa e alta, chave aberta e fechada ou ausência e presença de carga. Isso não significa que o computador “compreenda” números binários; significa apenas que convencionamos interpretar estados físicos dessa maneira.
2.3.4 Conversão de decimal para binário
Para converter um inteiro decimal não negativo em binário, podemos dividi-lo repetidamente por \(2\) e registrar os restos. Os restos devem ser lidos da última divisão para a primeira.
Convertamos \((45)_{10}\):
| Divisão | Quociente | Resto |
|---|---|---|
| \(45\div2\) | \(22\) | \(1\) |
| \(22\div2\) | \(11\) | \(0\) |
| \(11\div2\) | \(5\) | \(1\) |
| \(5\div2\) | \(2\) | \(1\) |
| \(2\div2\) | \(1\) | \(0\) |
| \(1\div2\) | \(0\) | \(1\) |
Lendo os restos de baixo para cima, obtemos
\[ (45)_{10}=(101101)_2. \]
Podemos verificar: \(32+8+4+1=45\).
Em Python, bin(45) devolve a cadeia '0b101101'. O prefixo 0b informa que a representação está em base \(2\); ele não faz parte dos algarismos do número.
2.3.5 Base hexadecimal
Representações binárias longas são difíceis de ler. O sistema hexadecimal, de base \(16\), oferece uma escrita compacta e alinhada aos bits. Ele usa os algarismos
\[ 0,1,\ldots,9,\mathrm{A},\mathrm{B},\mathrm{C},\mathrm{D},\mathrm{E},\mathrm{F}, \]
em que \(\mathrm{A}\) a \(\mathrm{F}\) representam os valores decimais \(10\) a \(15\). Por exemplo,
\[ (\mathrm{A02F})_{16} =10\cdot16^3+0\cdot16^2+2\cdot16^1+15\cdot16^0 =(41007)_{10}. \]
Como \(16=2^4\), cada algarismo hexadecimal corresponde exatamente a quatro bits:
| Binário | Hexadecimal | Decimal |
|---|---|---|
0000 |
0 |
0 |
0001 |
1 |
1 |
0010 |
2 |
2 |
0011 |
3 |
3 |
0100 |
4 |
4 |
0101 |
5 |
5 |
0110 |
6 |
6 |
0111 |
7 |
7 |
1000 |
8 |
8 |
1001 |
9 |
9 |
1010 |
A |
10 |
1011 |
B |
11 |
1100 |
C |
12 |
1101 |
D |
13 |
1110 |
E |
14 |
1111 |
F |
15 |
Para converter binário em hexadecimal, agrupamos os bits de quatro em quatro, começando pela direita. Se necessário, completamos o grupo da esquerda com zeros:
\[ (10110110)_2=(1011\;0110)_2=(\mathrm{B6})_{16}. \]
O processo inverso consiste em substituir cada algarismo hexadecimal por seus quatro bits. Assim,
\[ (\mathrm{3A})_{16}=(0011\;1010)_2. \]
Em programas, o prefixo 0x costuma indicar hexadecimal: 0x3A. Endereços de memória, máscaras de bits, códigos de cor e ferramentas de depuração frequentemente usam essa base.
2.3.6 Bits, nibbles, bytes e capacidade
Um grupo de quatro bits é informalmente chamado de nibble. Um grupo de oito bits é um byte. Com \(n\) bits existem
\[ 2^n \]
sequências distintas. Um byte, portanto, admite \(2^8=256\) padrões, de 00000000 a 11111111. Se interpretados como inteiros sem sinal, esses padrões representam os valores de \(0\) a \(255\).
Em geral, \(n\) bits representam inteiros sem sinal no intervalo
\[ 0\leq x\leq2^n-1. \]
O limite superior contém \(-1\) porque uma das \(2^n\) combinações é usada para representar o zero.
| Quantidade de bits | Número de padrões | Intervalo sem sinal |
|---|---|---|
| 4 | \(16\) | \(0\) a \(15\) |
| 8 | \(256\) | \(0\) a \(255\) |
| 16 | \(65\,536\) | \(0\) a \(65\,535\) |
| 32 | \(4\,294\,967\,296\) | \(0\) a \(4\,294\,967\,295\) |
2.3.7 Inteiros com sinal e complemento de dois
Para representar números negativos, computadores modernos geralmente usam complemento de dois. Com \(n\) bits, o intervalo passa a ser
\[ -2^{n-1}\leq x\leq2^{n-1}-1. \]
Em oito bits, isso corresponde a \(-128\) até \(127\). O bit mais à esquerda possui peso \(-2^{n-1}\), enquanto os demais mantêm pesos positivos. Por exemplo,
\[ (11111101)_2 =-2^7+2^6+2^5+2^4+2^3+2^2+0\cdot2^1+2^0 =-3. \]
Uma maneira prática de obter a representação de \(-x\) é inverter todos os bits da representação de \(x\) e somar \(1\). Em oito bits:
\[ 3=00000011 \longrightarrow11111100 \longrightarrow11111101=-3. \]
Na etapa intermediária, todos os bits foram invertidos; na etapa final, somamos 1.
Uma quantidade fixa de bits possui capacidade finita. Em um inteiro sem sinal de oito bits, \(255+1\) produz 00000000 se o cálculo descartar o transporte final. Esse retorno ao início é chamado de overflow e pode causar erros graves quando não é previsto.
2.3.8 Frações binárias e representação inexata
As posições à direita do separador binário têm pesos \(2^{-1},2^{-2},2^{-3},\ldots\). Portanto,
\[ (10,101)_2 =1\cdot2^1+0\cdot2^0+1\cdot2^{-1} +0\cdot2^{-2}+1\cdot2^{-3} =(2,625)_{10}. \]
Nem toda fração decimal possui representação binária finita. O número decimal \(0,1\), por exemplo, torna-se uma expansão binária infinita. Como a memória é finita, o computador armazena uma aproximação. Isso explica por que, em muitas linguagens,
0.1 + 0.2 == 0.3resulta em False.
Números de ponto flutuante normalmente são armazenados em uma forma análoga à notação científica, com sinal, significando e expoente. O padrão IEEE 754 especifica formatos amplamente usados. Para cálculos financeiros, em que centavos precisam ser exatos, pode ser melhor usar inteiros ou tipos decimais apropriados.
2.3.9 Bits não possuem significado isolado
A sequência 01000001 pode ser interpretada de várias maneiras. Como inteiro sem sinal, vale \(65\). Segundo a codificação ASCII, representa o caractere A. Também pode ser parte de uma instrução, de um pixel ou de um número em ponto flutuante. Os bits são os mesmos; o tipo e o contexto determinam a interpretação.
Essa observação conecta sistemas de numeração a um tema central da computação: dados precisam de uma convenção de codificação. Um arquivo não contém “uma imagem” ou “um texto” de maneira intrínseca; contém bytes interpretados segundo um formato.
2.3.10 Operações bit a bit
Linguagens de programação oferecem operações que atuam diretamente sobre os bits:
ANDpreserva uma posição somente quando os dois bits são \(1\);ORproduz \(1\) quando pelo menos um dos bits é \(1\);XORproduz \(1\) quando os bits são diferentes;NOTinverte cada bit;- deslocamentos movem os bits para a esquerda ou para a direita.
Por exemplo,
\[ 1010_2\;\operatorname{AND}\;1100_2=1000_2. \]
Deslocar um inteiro não negativo uma posição para a esquerda corresponde, quando não há overflow, a multiplicá-lo por \(2\). Deslocar para a direita corresponde a uma divisão inteira por \(2\). Essas operações aparecem em máscaras de permissões, protocolos de comunicação, compressão e programação de baixo nível.
2.3.11 Exemplo em Python
O código seguinte mostra diferentes representações do mesmo inteiro:
n = 45
print(bin(n)) # 0b101101
print(oct(n)) # 0o55
print(hex(n)) # 0x2d
print(int("101101", 2)) # 45
print(f"{n:08b}") # 00101101bin, oct e hex devolvem textos. O valor armazenado em n não “está em decimal” ou “está em hexadecimal”; essas bases dizem respeito à maneira escolhida para escrever ou exibir o valor.
2.3.12 Estratégias para evitar erros
Ao trabalhar com representações numéricas, convém seguir algumas práticas:
- Indique a base quando ela não estiver evidente: \((101)_2\), \((101)_{10}\) e \((101)_{16}\) são números diferentes.
- Verifique o intervalo permitido pelo tipo antes de realizar operações.
- Não compare números de ponto flutuante esperando igualdade exata; use uma tolerância adequada.
- Diferencie valor numérico de texto. A cadeia
"10"possui dois caracteres; o inteiro10é um valor numérico. - Use hexadecimal para inspecionar grupos de bits, mas converta cada algarismo com atenção.
2.3.13 Exercícios de fixação
- Expanda \((5072)_{10}\) como soma de potências de \(10\).
- Converta \((101011)_2\) para decimal e confirme o resultado somando os pesos das posições.
- Converta \((73)_{10}\) para binário pelo método das divisões sucessivas.
- Converta \((11011110)_2\) para hexadecimal e \((\mathrm{7A})_{16}\) para binário.
- Qual é o maior inteiro sem sinal representável com \(12\) bits? Quantos padrões diferentes existem?
- Determine o intervalo de inteiros com sinal em complemento de dois para \(16\) bits.
- Interprete
01000001como inteiro sem sinal e pesquise qual caractere ASCII possui esse código. - Explique, com suas palavras, por que \(0,1\) não pode ser representado exatamente por um número binário finito.
- Calcule
10110100 AND 11110000e explique como essa operação pode servir para selecionar os quatro bits mais significativos de um byte.
3 O que é um problema de aprendizado?
Programar um computador significa especificar um procedimento capaz de transformar entradas em saídas. Em muitos problemas, conhecemos bem esse procedimento. Para calcular a área de um círculo, por exemplo, fornecemos ao computador a fórmula \(A(r)=\pi r^2\). Para ordenar uma lista, implementamos um algoritmo de ordenação. As regras são escritas por uma pessoa e executadas pela máquina.
Há, porém, tarefas para as quais é difícil formular todas as regras explicitamente. Como escrever uma lista completa de instruções para reconhecer um rosto, detectar uma tentativa de fraude ou estimar o preço de uma residência? Uma pessoa realiza algumas dessas tarefas pela experiência, mas pode não conseguir descrever cada decisão como uma sequência rígida de condições. Nesses casos, podemos fornecer exemplos e fazer um algoritmo ajustar uma função que reproduza, tão bem quanto possível, os padrões observados.
Esse processo é chamado de aprendizado de máquina. O computador não aprende no mesmo sentido que uma pessoa, nem descobre necessariamente uma lei verdadeira da natureza. Ele executa um algoritmo de otimização que escolhe, dentro de uma família de funções possíveis, aquela que obtém um bom desempenho segundo um critério matemático.
3.1 Programação convencional e aprendizado de máquina
Na programação convencional, dados e regras são fornecidos ao computador, que calcula uma saída:
Um programa que calcula o imposto devido é um exemplo típico. As alíquotas e condições são conhecidas, codificadas e aplicadas aos dados do contribuinte. Se a legislação mudar, alguém deve alterar as regras do programa.
No aprendizado supervisionado, os dados de treinamento já incluem exemplos de entradas e das saídas desejadas. Um algoritmo utiliza esses pares para produzir um modelo:
flowchart LR
T[Exemplos de treinamento] --> A[Algoritmo de aprendizado]
H[Conjunto de hipóteses] --> A
E[Medida de erro] --> A
A --> M[Modelo treinado]
Depois do treinamento, o modelo é usado para calcular previsões:
flowchart LR
N[Nova entrada] --> M[Modelo treinado]
M --> P[Previsão]
É importante separar essas duas fases. Treinar significa escolher ou ajustar o modelo usando dados conhecidos. Inferir ou predizer significa aplicar o modelo já treinado a uma nova entrada. O treinamento pode exigir milhões de exemplos e grande capacidade computacional; uma inferência individual pode ser muito mais barata.
3.2 Elementos de um problema de aprendizado
Um problema de aprendizado supervisionado pode ser descrito inicialmente por cinco componentes.
- Entradas: objetos sobre os quais queremos tomar uma decisão. Representamos o conjunto de entradas possíveis por \(X\).
- Saídas: respostas que desejamos produzir. O conjunto de saídas possíveis é denotado por \(Y\).
- Dados: exemplos observados, frequentemente pares \((x_i,y_i)\) com \(x_i\in X\) e \(y_i\in Y\).
- Modelo: uma função \(h\colon X\to Y\), também chamada de hipótese, usada para produzir previsões.
- Critério de qualidade: uma medida que quantifica o quanto as previsões de \(h\) diferem das respostas observadas.
O algoritmo de aprendizado recebe os dados e procura uma hipótese que tenha erro pequeno. Em notação compacta, uma amostra supervisionada com \(N\) exemplos é
\[ D=\{(x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N)\}. \]
O objetivo não é apenas memorizar esses pares. Queremos que a função aprendida produza boas respostas para entradas que não estavam na amostra. Essa capacidade é chamada de generalização.
Um modelo que acerta todos os exemplos de treinamento pode ainda falhar diante de novos dados. O sucesso de um sistema de aprendizado é medido principalmente pelo desempenho fora da amostra usada para ajustá-lo.
3.3 Um exemplo: filtragem de spam
Considere o problema de classificar mensagens como spam ou não spam. O espaço de entrada \(X\) é formado pelas mensagens possíveis, e o espaço de saída é
\[ Y=\{0,1\}, \]
em que podemos convencionar \(1\) para spam e \(0\) para não spam.
O computador não manipula diretamente o significado linguístico de uma mensagem. Primeiro, precisamos transformá-la em atributos numéricos, como número de links, frequência de certas palavras, tamanho do assunto ou identidade do remetente. Essa transformação produz um vetor
\[ \mathbf{x}=(x_1,x_2,\ldots,x_d)\in\mathbb{R}^d. \]
Um conjunto de mensagens previamente rotuladas forma os dados de treinamento. O algoritmo ajusta um classificador \(h\colon\mathbb{R}^d\to\{0,1\}\). Para uma nova mensagem, calculamos \(h(\mathbf{x})\) e usamos o resultado como previsão.
Mesmo nesse exemplo simples surgem decisões importantes:
- os e-mails rotulados representam adequadamente as mensagens futuras?
- os rótulos estão corretos?
- quais atributos devem ser extraídos?
- qual tipo de função será usado como hipótese?
- qual é o custo de bloquear uma mensagem legítima em comparação com deixar passar um spam?
Essas perguntas mostram que aprendizado de máquina não consiste apenas em executar um algoritmo. É necessário formular o problema, obter dados adequados, escolher representações e avaliar riscos.
3.4 Tipos de saída
A natureza de \(Y\) ajuda a identificar o tipo de tarefa.
- Na classificação, a saída pertence a um conjunto finito de categorias. Exemplos:
spamounão spam; espécie de uma planta; algarismo presente em uma imagem. - Na regressão, a saída é numérica. Exemplos: preço de uma casa, temperatura futura ou tempo necessário para concluir uma tarefa.
- No ranqueamento, o objetivo é ordenar itens por relevância, como resultados de uma busca.
- Na geração, a saída pode ser uma sequência complexa, como texto, áudio, imagem ou código.
Um mesmo contexto pode originar formulações diferentes. Para analisar risco de crédito, podemos prever pagará ou não pagará (classificação), estimar a probabilidade de pagamento (regressão probabilística) ou ordenar clientes do menor para o maior risco (ranqueamento).
3.5 De onde vêm os exemplos?
Dados não aparecem prontos e neutros. Eles são coletados por sensores, formulários, registros de sistemas, experimentos ou pessoas responsáveis por rotular exemplos. Cada mecanismo de coleta introduz escolhas e possíveis erros.
Uma amostra pode ser enviesada quando representa alguns grupos ou situações melhor do que outros. Dados históricos também podem preservar decisões injustas do passado. Além disso, o ambiente pode mudar: padrões de fraude, linguagem usada em spam e preferências de usuários não permanecem constantes para sempre.
Por isso, a origem dos dados deve ser documentada. Devemos perguntar quem ou o que ficou de fora, como os rótulos foram definidos, quais erros de medição existem e se o uso pretendido é compatível com o consentimento e a privacidade das pessoas envolvidas.
3.6 Hipótese, parâmetros e algoritmo
Três conceitos próximos precisam ser distinguidos:
- a hipótese é uma função candidata \(h\colon X\to Y\);
- os parâmetros são valores internos que determinam uma hipótese específica;
- o algoritmo de aprendizado é o procedimento que escolhe os parâmetros a partir dos dados.
Por exemplo, uma função linear pode ser escrita como
\[ h_{\mathbf{w},b}(\mathbf{x})=\mathbf{w}^{\mathsf{T}}\mathbf{x}+b. \]
Os valores de \(\mathbf{w}\) e \(b\) são parâmetros. O conjunto de todas as funções obtidas ao variar esses parâmetros é uma família de hipóteses. Um algoritmo de treinamento procura valores que reduzam o erro nos exemplos disponíveis.
Em uma rede neural, há muitos parâmetros organizados em matrizes e vetores. Embora a arquitetura seja especificada pelo programador, os valores desses parâmetros são ajustados durante o treinamento.
3.7 Erro e objetivo de treinamento
Para comparar uma previsão \(h(x_i)\) com a resposta correta \(y_i\), usamos uma função de perda. Em regressão, uma escolha simples é o erro quadrático:
\[ \ell(h(x_i),y_i)=(h(x_i)-y_i)^2. \]
O erro médio na amostra é então
\[ E_D(h)=\frac{1}{N}\sum_{i=1}^{N}\ell(h(x_i),y_i). \]
Treinar pode ser visto como procurar uma hipótese com valor pequeno de \(E_D(h)\). Entretanto, minimizar apenas o erro de treinamento pode favorecer modelos que memorizam detalhes acidentais. Mais adiante discutiremos separação entre treino e teste, regularização e limites de generalização.
3.8 Quando usar aprendizado de máquina?
Aprendizado de máquina tende a ser útil quando há dados representativos, uma meta mensurável e uma relação entre entradas e saídas que pode ser explorada. Também é importante que o padrão procurado seja relativamente estável e que os erros possam ser monitorados.
Nem todo problema precisa de aprendizado. Uma regra explícita é geralmente preferível quando é conhecida, curta, confiável e fácil de manter. Não faz sentido treinar um modelo para converter graus Celsius em Fahrenheit ou verificar se um número inteiro é par. Nesses casos, a solução determinística é mais transparente e exata.
Também devemos ser cautelosos quando há poucos dados, quando o custo de um erro é muito alto ou quando não existe uma forma responsável de avaliar o sistema. Em aplicações médicas, jurídicas, financeiras ou de segurança, previsões precisam de validação rigorosa, supervisão humana e análise das consequências.
3.9 Um roteiro para formular o problema
Antes de escolher um algoritmo, é útil responder às seguintes perguntas:
- Qual decisão ou previsão queremos produzir?
- O que constitui uma entrada e quais informações estarão disponíveis no momento da previsão?
- Qual é o espaço de saídas?
- De onde virão os exemplos e como serão rotulados?
- Como mediremos um erro e quais tipos de erro são mais graves?
- Como verificaremos o desempenho em dados ainda não vistos?
- Como o sistema será monitorado após entrar em uso?
Esse roteiro evita um erro comum: começar pelo modelo antes de definir claramente o problema. Um sistema tecnicamente sofisticado não compensa uma pergunta mal formulada ou dados inadequados.
3.10 Exercícios de fixação
- Compare programação convencional e aprendizado de máquina usando como exemplo a detecção de mensagens de spam.
- Para um sistema que estima o tempo de entrega de uma encomenda, identifique \(X\), \(Y\), possíveis atributos e o tipo de tarefa.
- Explique a diferença entre treinamento e inferência.
- Dê um exemplo de modelo que memoriza os dados de treinamento, mas não generaliza.
- Proponha uma tarefa para a qual uma regra explícita seja melhor do que aprendizado de máquina e justifique.
- Em um diagnóstico assistido por computador, cite dois tipos de erro com consequências diferentes. Como essa diferença deveria influenciar a avaliação?
- Explique a diferença entre hipótese, parâmetros e algoritmo de aprendizado no caso de uma função linear.
3.11 Categorias de Aprendizado
Problemas de aprendizado podem ser organizados de acordo com o tipo de informação disponível durante o treinamento e com a forma pela qual o sistema recebe retorno sobre suas decisões. Essa classificação orienta a preparação dos dados, a escolha dos algoritmos e a maneira de avaliar os resultados.
As categorias não são caixas absolutamente isoladas. Um sistema real pode combinar várias delas: um modelo pode ser pré-treinado de forma autossupervisionada, refinado com exemplos rotulados e depois ajustado com feedback humano por reforço. Ainda assim, compreender os paradigmas separadamente fornece um vocabulário útil para projetar soluções.
3.11.1 Especificar regras ou aprender com dados?
Antes de comparar as categorias, convém distinguir duas formas de construir um sistema. Na especificação direta, o programador determina explicitamente as regras. Para verificar se uma senha possui pelo menos doze caracteres, basta escrever uma condição. A regra é conhecida, verificável e não precisa ser estimada.
No aprendizado de máquina, o programador especifica a representação dos dados, a família de modelos, a medida de erro e o procedimento de treinamento. As decisões internas do modelo são ajustadas usando exemplos. Portanto, o sistema não elimina a especificação humana; ele desloca parte dela das regras finais para o processo pelo qual as regras paramétricas serão ajustadas.
Considere a identificação de moedas por diâmetro e massa. Se o fabricante fornece intervalos exatos e estáveis para cada moeda, podemos codificar esses limites diretamente. Se as medições variam por desgaste, ruído do sensor ou diferenças de fabricação, podemos coletar exemplos e ajustar fronteiras de decisão. A escolha entre regras e aprendizado depende do conhecimento disponível, da variabilidade do problema e do custo dos erros.
Regras definidas antes de observar exemplos constituem uma especificação. Parâmetros ajustados a partir dos exemplos constituem aprendizado. Na prática, sistemas frequentemente combinam ambos: regras garantem restrições obrigatórias, enquanto modelos tratam padrões difíceis de descrever.
3.11.2 Aprendizado supervisionado
No aprendizado supervisionado, cada exemplo de treinamento contém uma entrada e uma saída desejada:
\[ D=\{(x_i,y_i)\}_{i=1}^{N}. \]
O termo “supervisionado” não significa necessariamente que uma pessoa acompanha cada etapa do treinamento. Significa que existe um alvo \(y_i\) associado a cada entrada \(x_i\). Esse alvo pode ter sido fornecido por especialistas, produzido por sensores, extraído de registros históricos ou calculado por outro processo.
O algoritmo procura uma função \(h\colon X\to Y\) que aproxime a relação observada. Há dois subtipos centrais:
- classificação, quando \(Y\) contém categorias discretas, como
spamenão spam; - regressão, quando \(Y\) é numérico, como preço, temperatura ou duração.
Por exemplo, para classificar e-mails, uma amostra pode conter vetores de atributos e seus rótulos:
\[ (\mathbf{x}_i,y_i), \qquad \mathbf{x}_i\in\mathbb{R}^d, \quad y_i\in\{0,1\}. \]
O treinamento usa os rótulos para calcular o erro e corrigir o modelo. Depois, o classificador recebe uma mensagem ainda não rotulada e estima sua classe.
Exemplos de aplicações supervisionadas incluem reconhecimento de caracteres, previsão de inadimplência, diagnóstico assistido, detecção de objetos e estimativa de demanda.
3.11.2.1 Qualidade dos rótulos
Rótulos são medições e podem conter erros. Dois especialistas podem discordar sobre um diagnóstico; usuários podem marcar mensagens legítimas como spam; registros históricos podem refletir decisões enviesadas. Um modelo não possui acesso direto à “verdade”: ele aprende a partir dos alvos fornecidos.
Também pode ocorrer vazamento de dados quando um atributo contém, direta ou indiretamente, informação que só estaria disponível depois da resposta que queremos prever. Um modelo de risco hospitalar não deve usar um procedimento realizado após o diagnóstico como entrada para prever esse mesmo diagnóstico.
3.11.3 Aprendizado não supervisionado
No aprendizado não supervisionado, a amostra contém entradas sem uma saída-alvo explícita:
\[ D=\{x_i\}_{i=1}^{N}. \]
O objetivo é encontrar estrutura nos dados: grupos, direções de maior variação, representações compactas ou exemplos atípicos. Como não há rótulos corretos disponíveis durante o treinamento, a avaliação exige critérios diferentes daqueles usados na classificação supervisionada.
As tarefas mais comuns incluem:
- agrupamento (clustering): reunir exemplos semelhantes;
- redução de dimensionalidade: representar os dados usando menos variáveis;
- detecção de anomalias: localizar observações que diferem do padrão predominante;
- estimativa de densidade: modelar regiões mais e menos prováveis do espaço de dados.
No exemplo das moedas, podemos representar cada moeda por massa e diâmetro. Um algoritmo de agrupamento pode separar concentrações de pontos sem conhecer os valores monetários. Contudo, os grupos encontrados não vêm automaticamente acompanhados dos nomes “dez centavos” ou “um real”. Além disso, dependendo da medida de distância e do algoritmo, os agrupamentos podem refletir tamanho, material, estado de conservação ou simplesmente ruído.
Um algoritmo não supervisionado encontra estrutura segundo hipóteses matemáticas escolhidas por nós. Mudar a escala dos atributos, a noção de similaridade ou o número de grupos pode alterar completamente o resultado.
3.11.4 Aprendizado autossupervisionado
No aprendizado autossupervisionado, os alvos são construídos a partir dos próprios dados, sem a necessidade de rotulação manual para cada exemplo. Escondemos ou transformamos parte da entrada e treinamos o modelo para recuperá-la.
Em modelos de linguagem, uma tarefa comum é prever o próximo token:
\[ (w_1,w_2,\ldots,w_t) \longmapsto w_{t+1}. \]
O texto fornece tanto a entrada quanto o alvo. Em visão computacional, podemos ocultar regiões de uma imagem e pedir ao modelo que reconstrua o conteúdo ausente. Essas tarefas permitem aprender representações gerais usando grandes volumes de dados não rotulados manualmente.
Embora os alvos sejam gerados automaticamente, o treinamento continua matematicamente semelhante ao supervisionado: existe uma resposta esperada e uma função de perda. A diferença está na origem da supervisão.
3.11.5 Aprendizado semissupervisionado
Rotular dados pode ser caro, enquanto coletar entradas sem rótulo pode ser fácil. O aprendizado semissupervisionado combina um pequeno conjunto rotulado
\[ D_L=\{(x_i,y_i)\} \]
com um conjunto maior sem rótulos
\[ D_U=\{x_j\}. \]
O método tenta aproveitar a estrutura de \(D_U\) para melhorar a previsão, sem tratar automaticamente toda predição do próprio modelo como verdade. Estratégias incluem pseudorrótulos, regularização por consistência e propagação de rótulos em grafos.
Essa abordagem é útil em imagens médicas, áudio e documentos, nos quais especialistas podem rotular apenas uma fração do material disponível.
3.11.6 Aprendizado por reforço
No aprendizado por reforço, um agente interage repetidamente com um ambiente. Em cada instante \(t\), ele observa um estado \(s_t\), escolhe uma ação \(a_t\), recebe uma recompensa \(r_{t+1}\) e chega a um novo estado \(s_{t+1}\):
\[ s_t \xrightarrow{\ a_t\ } (r_{t+1},s_{t+1}). \]
O objetivo não é simplesmente prever um rótulo, mas aprender uma política \(\pi\) que escolha ações capazes de maximizar a recompensa acumulada ao longo do tempo.
flowchart LR
A[Agente] -->|ação a_t| M[Ambiente]
M -->|estado s_t e recompensa r_t| A
Uma recompensa imediata pode não revelar a qualidade de uma ação. Em um jogo de xadrez, sacrificar uma peça reduz a vantagem material naquele momento, mas pode contribuir para a vitória muitos lances depois. Esse é o problema de atribuição temporal de crédito: determinar quais decisões anteriores foram responsáveis pelo resultado futuro.
3.11.6.1 Exploração e aproveitamento
O agente enfrenta um dilema:
- aproveitar (exploitation) ações que já parecem boas;
- explorar ações menos conhecidas que podem revelar estratégias melhores.
Se apenas aproveitar o conhecimento atual, pode permanecer preso a uma estratégia mediana. Se explorar o tempo todo, deixa de usar o que aprendeu. Algoritmos de reforço equilibram esses comportamentos de diferentes maneiras.
Aplicações incluem controle robótico, jogos, alocação de recursos e sistemas de recomendação sequencial. O paradigma exige cuidado: uma recompensa mal definida pode induzir comportamentos que maximizam a pontuação formal sem cumprir a intenção humana.
3.11.7 Aprendizado on-line e em lote
Outra distinção diz respeito ao momento em que os dados chegam.
No aprendizado em lote (batch), o modelo é treinado usando um conjunto previamente reunido. Novos dados só influenciam o sistema em um treinamento posterior. No aprendizado on-line, os parâmetros são atualizados à medida que observações chegam.
Aprendizado on-line é útil para fluxos contínuos e ambientes que mudam, mas requer mecanismos contra ruído, ataques e esquecimento de padrões anteriores. “On-line” nesse contexto não significa necessariamente conectado à internet; significa atualização incremental.
3.11.8 Comparação entre paradigmas
| Paradigma | Informação de treinamento | Objetivo típico | Exemplo |
|---|---|---|---|
| Supervisionado | pares \((x,y)\) | prever \(y\) para nova entrada | classificar spam |
| Não supervisionado | entradas \(x\) | descobrir estrutura | agrupar clientes |
| Autossupervisionado | alvos derivados dos dados | aprender representações | prever próximo token |
| Semissupervisionado | poucos rótulos e muitas entradas | melhorar previsão com dados não rotulados | classificar imagens médicas |
| Por reforço | estados, ações e recompensas | maximizar retorno acumulado | aprender uma estratégia de jogo |
Essa tabela descreve a fonte do sinal de aprendizado, e não o algoritmo específico. Redes neurais, por exemplo, podem ser usadas em todos esses paradigmas.
3.11.9 Como escolher a categoria?
A escolha começa pela informação disponível e pela pergunta que desejamos responder:
- Há uma saída correta conhecida para cada exemplo? O problema pode ser supervisionado.
- Há muitos dados, mas poucos rótulos? Considere aprendizado semissupervisionado ou autossupervisionado.
- Queremos explorar a estrutura dos dados sem prever um alvo conhecido? Trata-se de uma tarefa não supervisionada.
- As decisões alteram estados futuros e o retorno ocorre ao longo do tempo? O paradigma de reforço pode ser apropriado.
Não devemos escolher uma categoria apenas porque está em evidência. Se existe uma regra exata, ela pode ser mais adequada do que qualquer modelo aprendido. Se não há dados capazes de medir o objetivo, mudar o algoritmo não resolve a formulação incompleta.
3.11.10 Exercícios de fixação
- Classifique como supervisionada, não supervisionada ou por reforço: prever o preço de uma casa; agrupar notícias por assunto; aprender a controlar um robô por recompensas.
- Explique por que prever o próximo token é chamado de aprendizado autossupervisionado.
- Um agrupamento separou clientes por região, mas a equipe esperava grupos por comportamento de compra. O resultado está “errado”? Discuta o papel dos atributos e da métrica de similaridade.
- Dê um exemplo do dilema entre exploração e aproveitamento fora de jogos.
- Explique a diferença entre aprendizado on-line e um serviço disponível na internet.
- Proponha uma tarefa que combine pré-treinamento autossupervisionado e ajuste supervisionado.
- Para identificação de moedas, descreva uma solução por regras e uma solução aprendida. Em que condições você escolheria cada uma?
3.12 Exemplos de Aprendizado Supervisionado
O aprendizado supervisionado aparece em contextos muito diferentes, mas todos compartilham a mesma estrutura: dispomos de entradas acompanhadas por respostas conhecidas e queremos construir uma função que produza respostas adequadas para novas entradas. O domínio da aplicação muda; a formulação matemática permanece semelhante.
Para analisar uma aplicação, não basta dizer que “usaremos inteligência artificial”. Precisamos identificar claramente:
- qual objeto constitui uma entrada \(x\);
- qual resposta será usada como alvo \(y\);
- se a tarefa é classificação ou regressão;
- como os exemplos serão coletados;
- qual métrica traduz a qualidade desejada;
- quais são as consequências de cada tipo de erro.
Os estudos de caso seguintes aplicam esse roteiro.
3.12.1 Diagnóstico assistido
Considere um sistema que auxilia profissionais de saúde na identificação de uma doença. Uma entrada pode combinar idade, sintomas, resultados laboratoriais e medições obtidas por equipamentos:
\[ \mathbf{x}=(x_1,x_2,\ldots,x_d)\in X. \]
Se o objetivo for indicar presença ou ausência de uma condição, podemos usar
\[ Y=\{0,1\}. \]
Os exemplos de treinamento seriam registros clínicos cujo diagnóstico foi estabelecido por um procedimento de referência. O modelo aprenderia uma função \(h\colon X\to\{0,1\}\) ou, preferencialmente, uma probabilidade estimada
\[ h(\mathbf{x})\approx P(Y=1\mid X=\mathbf{x}). \]
Nesse domínio, dois erros merecem atenção distinta. Um falso negativo ocorre quando uma pessoa doente é classificada como saudável; um falso positivo ocorre quando uma pessoa saudável é sinalizada como doente. A importância relativa depende da condição, do tratamento e do uso do sistema. Por isso, apenas a porcentagem total de acertos pode ser insuficiente.
Também é necessário separar correlação de causalidade. Um modelo pode descobrir que certo procedimento está associado à doença porque o procedimento costuma ser solicitado depois que médicos já suspeitam do diagnóstico. Usar essa variável pode produzir bom resultado retrospectivo, mas não uma ferramenta válida para detecção precoce.
Em aplicações clínicas, o modelo deve ser validado na população e no contexto de uso. Uma previsão estatística não substitui avaliação profissional, protocolos de segurança nem responsabilidade institucional.
3.12.2 Filtragem de mensagens indesejadas
Na filtragem de e-mails, a entrada original é uma mensagem e o alvo indica spam ou não spam. Para processar o texto, extraímos atributos como frequência de termos, remetente, número de links e características do cabeçalho.
Uma representação simples é o vetor de contagens. Escolhido um vocabulário com \(d\) termos, a coordenada \(x_j\) registra quantas vezes o termo \(j\) aparece:
\[ \mathbf{x}\in\mathbb{N}^d, \qquad y\in\{0,1\}. \]
O classificador é treinado com mensagens previamente rotuladas. Entretanto, os padrões mudam: remetentes maliciosos adaptam sua escrita para evitar filtros, enquanto mensagens legítimas passam a usar expressões antes associadas a spam. Esse fenômeno é um exemplo de mudança de distribuição.
A escolha da métrica deve refletir a experiência do usuário. Bloquear um e-mail legítimo pode ser mais grave do que deixar uma propaganda chegar à caixa de entrada. Por isso, precisão, revocação e taxa de falsos positivos devem ser examinadas separadamente.
3.12.3 Avaliação de risco de crédito
Em uma análise de crédito, a entrada pode conter renda, comprometimento mensal, histórico de pagamentos e características do contrato. Há várias perguntas possíveis, e cada uma define um problema diferente:
- prever se ocorrerá inadimplência: classificação binária;
- estimar a probabilidade de inadimplência: regressão probabilística;
- estimar o prejuízo esperado: regressão;
- ordenar propostas por risco: ranqueamento.
Para classificação, podemos escrever
\[ h\colon X\to\{0,1\}, \]
mas a decisão de conceder crédito não precisa coincidir diretamente com \(h(\mathbf{x})\). Uma política posterior pode considerar probabilidade estimada, valor solicitado, garantias e limites regulatórios.
Dados históricos exigem análise cuidadosa. Observamos o pagamento apenas para pessoas que receberam crédito no passado. Não sabemos diretamente o que teria acontecido com propostas recusadas. Além disso, decisões anteriores podem conter discriminação. Um modelo que imita esses dados pode reproduzir ou ampliar desigualdades.
3.12.4 Previsão de desempenho esportivo
Em esportes, entradas podem reunir velocidade, distância percorrida, precisão, histórico de lesões e estatísticas de partidas. O alvo deve ser definido de forma mensurável. “Ser convocado para a seleção” é um rótulo possível, mas mistura desempenho com decisões táticas, disponibilidade, posição e escolhas da comissão técnica.
Uma formulação mais específica poderia prever a quantidade de ações bem-sucedidas em uma partida futura:
\[ h\colon\mathbb{R}^d\to\mathbb{R}_{\geq0}. \]
Outra poderia estimar a probabilidade de lesão em determinado intervalo. Em ambos os casos, é importante evitar informações posteriores ao evento previsto e respeitar a privacidade dos atletas.
O exemplo evidencia que o alvo disponível nem sempre coincide com a qualidade que realmente queremos medir. Aprender a reproduzir convocações passadas não significa necessariamente aprender “mérito esportivo”.
3.12.5 Reconhecimento de imagens
Considere a classificação de imagens de algarismos manuscritos. Uma imagem em tons de cinza com \(28\times28\) pixels pode ser transformada em um vetor com \(784\) intensidades:
\[ \mathbf{x}\in[0,1]^{784}. \]
O rótulo pertence ao conjunto
\[ Y=\{0,1,2,\ldots,9\}. \]
O modelo pode produzir dez pontuações, uma para cada classe. Após uma normalização, essas pontuações podem ser interpretadas como probabilidades estimadas. A classe prevista é frequentemente a de maior valor:
\[ \widehat{y}=\underset{k\in Y}{\operatorname{argmax}}\;h_k(\mathbf{x}). \]
Mesmo aqui existem dificuldades: caligrafias variam, algumas imagens são ambíguas e dados de treinamento podem não representar dispositivos ou populações futuras.
3.12.6 Previsão de demanda
Uma empresa pode querer estimar quantas unidades de um produto serão solicitadas na próxima semana. Entradas possíveis incluem vendas anteriores, preço, promoções, feriados, região e disponibilidade em estoque. A saída é uma quantidade numérica:
\[ h\colon X\to\mathbb{R}_{\geq0}. \]
Esse é um problema de regressão. Erros para cima e para baixo podem ter custos diferentes: superestimar gera estoque parado; subestimar provoca falta do produto. Uma função de perda assimétrica pode representar essa diferença melhor do que o erro quadrático usual.
Séries temporais exigem uma divisão de treino e teste que respeite o tempo. Treinar com dados futuros para avaliar previsões do passado causaria vazamento e produziria uma estimativa irrealista de desempenho.
3.12.7 Comparando os exemplos
| Aplicação | Entrada | Alvo | Tarefa | Risco relevante |
|---|---|---|---|---|
| Diagnóstico assistido | dados clínicos | condição presente ou ausente | classificação | falsos negativos e positivos |
| Filtro de spam | conteúdo e metadados | spam ou não spam | classificação | bloquear mensagem legítima |
| Crédito | atributos e contrato | inadimplência ou prejuízo | classificação ou regressão | viés e decisões seletivas passadas |
| Esporte | medições de desempenho | resultado futuro | classificação ou regressão | alvo representar mal o objetivo |
| Algarismos | pixels | classe de \(0\) a \(9\) | classificação multiclasse | variação e ambiguidade visual |
| Demanda | histórico e contexto | quantidade futura | regressão | estoque excessivo ou insuficiente |
A tabela mostra que a mesma técnica pode aparecer em domínios distintos, mas os riscos e critérios de sucesso não são intercambiáveis. Uma acurácia considerada adequada em recomendação de conteúdo pode ser inaceitável em uma triagem médica.
3.12.8 Da pergunta ao conjunto de dados
Depois de definir entrada e alvo, precisamos construir uma amostra. Um procedimento cuidadoso inclui:
- determinar a população sobre a qual o sistema será usado;
- estabelecer como entradas e rótulos serão medidos;
- documentar dados ausentes e critérios de exclusão;
- separar exemplos de treinamento, validação e teste;
- escolher métricas antes de observar o resultado final;
- verificar desempenho por grupos e condições relevantes;
- planejar monitoramento após a implantação.
Esse processo é parte central do aprendizado supervisionado. Um conjunto grande de dados não corrige automaticamente rótulos ruins, amostragem enviesada ou uma pergunta mal definida.
3.12.9 Exercícios de fixação
- Para um sistema que prevê evasão de estudantes, defina entrada, alvo e tipo de tarefa. Cite um possível vazamento de dados.
- Explique por que “convocação passada” e “qualidade esportiva” não são necessariamente o mesmo alvo.
- Em um filtro de spam, compare as consequências de falso positivo e falso negativo.
- Transforme a previsão binária de inadimplência em um problema de regressão e explique o significado da saída.
- Para previsão de demanda, proponha uma situação em que subestimar seja mais caro do que superestimar.
- Escolha uma aplicação da tabela e proponha duas métricas complementares para avaliá-la.
- Crie um novo exemplo supervisionado e descreva \(X\), \(Y\), a origem dos rótulos e um risco ético ou operacional.
3.13 Formalização
Até aqui descrevemos o aprendizado de maneira intuitiva. Agora reuniremos seus componentes em uma notação única. A formalização ajuda a responder perguntas precisas: o que o algoritmo recebe, o que ele escolhe, que quantidade procura minimizar e em que sentido esperamos que o resultado funcione para dados futuros.
3.13.1 Espaço de entrada e espaço de saída
O espaço de entrada \(X\) contém todos os objetos que podem ser apresentados ao modelo. Dependendo da aplicação, um elemento \(x\in X\) pode ser um número, um vetor, uma imagem, uma sequência de tokens ou uma estrutura mais complexa.
O espaço de saída \(Y\) contém as respostas possíveis. Alguns exemplos são:
\[ Y=\{0,1\} \]
para classificação binária,
\[ Y=\{1,2,\ldots,K\} \]
para classificação com \(K\) classes, e
\[ Y=\mathbb{R} \]
para regressão. A escolha de \(X\) e \(Y\) faz parte da formulação do problema. Dizer apenas “prever crédito” é insuficiente: precisamos decidir quais informações formam a entrada e se a saída será uma classe, uma probabilidade ou um valor monetário.
3.13.2 Processo gerador dos dados
Supomos que os pares entrada-saída são produzidos por algum processo desconhecido. Representamos esse processo por uma distribuição conjunta \(P\) sobre \(X\times Y\):
\[ (X,Y)\sim P. \]
Aqui, \(X\) e \(Y\) em maiúsculas representam variáveis aleatórias; \(x\) e \(y\) representam valores observados. A distribuição \(P\) descreve tanto quais entradas são frequentes quanto como as saídas se relacionam com elas.
Em um problema determinístico ideal, pode existir uma função-alvo
\[ f\colon X\to Y \]
tal que \(y=f(x)\) para todo exemplo. Entretanto, problemas reais frequentemente contêm ruído, fatores não observados ou respostas genuinamente incertas. Nesse caso, uma única entrada pode estar associada a diferentes saídas com determinadas probabilidades. A descrição adequada é a distribuição condicional
\[ P(Y=y\mid X=x). \]
Por exemplo, duas pessoas com os mesmos atributos registrados podem apresentar resultados clínicos diferentes porque o vetor de entrada não contém toda a informação biologicamente relevante.
Falar em uma função-alvo que “sempre acerta” pode ser útil em problemas sem ruído, mas não deve ser tomado como regra geral. Em contextos probabilísticos, o alvo ideal pode ser uma probabilidade, uma média condicional ou a decisão que minimiza um custo esperado.
3.13.3 Amostra de treinamento
O algoritmo não conhece \(P\). Ele observa uma amostra finita de \(N\) pares:
\[ D=\bigl((x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N)\bigr). \]
Frequentemente assumimos que esses pares são independentes e identicamente distribuídos, abreviado por i.i.d.:
\[ (x_i,y_i)\overset{\text{i.i.d.}}{\sim}P. \]
Essa hipótese afirma que cada exemplo foi obtido pelo mesmo processo e que a observação de um exemplo não altera as demais. Ela simplifica a teoria, mas nem sempre é realista. Dados temporais, pessoas da mesma família, quadros consecutivos de um vídeo ou múltiplas medições do mesmo paciente podem ser dependentes.
A amostra deve conter os pares \((x_i,y_i)\), e não somente as entradas \(x_i\), quando o problema é supervisionado. Em aprendizado não supervisionado, por outro lado, observamos apenas \((x_1,\ldots,x_N)\).
3.13.4 Classe de hipóteses
Uma hipótese é uma função candidata que transforma entradas em previsões:
\[ h\colon X\to\widehat{Y}. \]
Usamos \(\widehat{Y}\) porque o formato da previsão pode diferir do alvo final. Em classificação binária, por exemplo, o alvo pode pertencer a \(\{0,1\}\), enquanto o modelo produz uma probabilidade em \([0,1]\) que depois será convertida em classe.
A classe de hipóteses \(\mathcal{H}\) é o conjunto de funções entre as quais o algoritmo pode escolher:
\[ \mathcal{H}=\{h_\theta\mid\theta\in\Theta\}. \]
\(\theta\) representa os parâmetros do modelo. Para funções afins,
\[ h_{\mathbf{w},b}(\mathbf{x})=\mathbf{w}^{\mathsf T}\mathbf{x}+b, \]
temos \(\theta=(\mathbf{w},b)\). Em uma rede neural, \(\theta\) reúne todas as matrizes de pesos e vetores de vieses.
A escolha de \(\mathcal{H}\) impõe um viés indutivo: limita os padrões que o método consegue representar e indica quais soluções considera plausíveis. Sem alguma restrição, os dados finitos não determinam como o modelo deve agir em pontos ainda não observados.
3.13.5 Função de perda
Uma função de perda mede a qualidade de uma previsão para um único exemplo:
\[ \ell\colon\widehat{Y}\times Y\to[0,\infty). \]
O primeiro argumento é a previsão \(h(x)\); o segundo é o alvo \(y\). Na regressão, uma escolha comum é a perda quadrática:
\[ \ell(h(x),y)=(h(x)-y)^2. \]
Na classificação, a perda zero-um registra apenas se houve acerto:
\[ \ell_{0/1}(h(x),y) = \begin{cases} 0, & h(x)=y,\\ 1, & h(x)\neq y. \end{cases} \]
Perda não é sinônimo de distância entre entradas. Ela compara uma saída prevista com uma saída observada. Além disso, perdas diferentes expressam prioridades diferentes. Se um falso negativo custa mais do que um falso positivo, a função pode atribuir penalidades distintas a esses eventos.
3.13.6 Risco empírico
Como conhecemos apenas a amostra, calculamos a perda média nos dados observados:
\[ \widehat{R}_D(h) =\frac{1}{N}\sum_{i=1}^{N}\ell(h(x_i),y_i). \]
Essa quantidade é chamada de risco empírico, erro dentro da amostra ou erro de treinamento. O acento em \(\widehat{R}\) lembra que se trata de uma estimativa construída a partir de uma amostra finita.
Um algoritmo de minimização do risco empírico procura
\[ \widehat{h} \in \underset{h\in\mathcal{H}}{\operatorname{argmin}} \;\widehat{R}_D(h). \]
O símbolo \(\operatorname{argmin}\) devolve o argumento que minimiza a expressão — neste caso, uma função \(h\) — e não o menor valor da expressão.
3.13.7 Algoritmo de aprendizado
Formalmente, um algoritmo de aprendizado \(A\) transforma uma amostra em uma hipótese:
\[ A\colon (X\times Y)^N\to\mathcal{H}, \qquad D\mapsto A(D)=\widehat{h}. \]
O algoritmo pode usar descida do gradiente, uma solução algébrica, busca combinatória ou outro procedimento. A classe de hipóteses e o algoritmo não são a mesma coisa. Dois algoritmos podem procurar funções na mesma classe e produzir resultados diferentes por causa de inicialização, aproximações ou critérios de parada.
Em pseudocódigo, o fluxo geral é:
entrada: amostra D e classe de hipóteses H
inicialize os parâmetros do modelo
repita:
calcule previsões nos exemplos
avalie a perda média
atualize os parâmetros para reduzir a perda
até o critério de parada
saída: hipótese treinada h
Nem todo algoritmo segue literalmente esse ciclo iterativo, mas a descrição evidencia o papel de cada componente.
3.13.8 Risco esperado e generalização
O que realmente desejamos minimizar não é apenas o erro nos exemplos conhecidos, mas o erro médio em novos pares gerados por \(P\):
\[ R(h) =\mathbb{E}_{(X,Y)\sim P} \bigl[\ell(h(X),Y)\bigr]. \]
\(R(h)\) é chamado de risco esperado, risco verdadeiro ou erro fora da amostra. Como \(P\) é desconhecida, não podemos calculá-lo exatamente. Usamos dados de validação e teste para estimá-lo.
A lacuna de generalização compara o risco esperado com o empírico:
\[ R(h)-\widehat{R}_D(h). \]
Um modelo que memoriza a amostra pode ter \(\widehat{R}_D(h)\) muito pequeno e, ainda assim, apresentar \(R(h)\) grande. A teoria do aprendizado investiga condições sob as quais o risco empírico fornece informação confiável sobre o risco esperado.
3.13.9 Regularização
Para desencorajar soluções excessivamente complexas, podemos acrescentar um termo de regularização \(\Omega(h)\):
\[ \widehat{h} \in \underset{h\in\mathcal{H}}{\operatorname{argmin}} \left[ \widehat{R}_D(h)+\lambda\Omega(h) \right]. \]
\(\lambda\geq0\) controla o equilíbrio entre ajustar os dados e preferir uma solução mais simples. Em um modelo linear, \(\Omega(h)\) pode penalizar pesos de grande magnitude. Regularização também pode ser implementada por parada antecipada, aumento de dados ou restrições na arquitetura.
3.13.10 Caso determinístico e caso probabilístico
No caso determinístico, supomos
\[ Y=f(X), \]
e tentamos aproximar \(f\). No caso probabilístico, modelamos
\[ P(Y\mid X=x). \]
Para regressão com perda quadrática, a função que minimiza o risco esperado é a média condicional:
\[ h^*(x)=\mathbb{E}[Y\mid X=x]. \]
Para classificação binária, podemos estimar
\[ \eta(x)=P(Y=1\mid X=x) \]
e escolher a classe \(1\) quando \(\eta(x)\) ultrapassa um limiar. O limiar não precisa ser \(0{,}5\) quando os custos dos erros são diferentes.
Essa perspectiva é mais precisa do que imaginar que toda frequência observada é uma propriedade fixa da entrada. A amostra fornece evidência limitada sobre uma distribuição; o modelo utiliza hipóteses e regularidades para generalizar além das ocorrências registradas.
3.13.11 Exemplo completo
Considere uma regressão que estima o tempo de execução de um programa a partir do tamanho da entrada:
\[ X=\mathbb{R}_{>0}, \qquad Y=\mathbb{R}_{>0}. \]
A amostra contém medições
\[ D=\{(n_i,t_i)\}_{i=1}^{N}. \]
Escolhemos a classe de funções afins
\[ \mathcal{H}=\{h_{a,b}(n)=an+b\mid a,b\in\mathbb{R}\} \]
e a perda quadrática. O treinamento procura
\[ (\widehat{a},\widehat{b}) \in \underset{a,b}{\operatorname{argmin}} \frac{1}{N}\sum_{i=1}^{N} \bigl(an_i+b-t_i\bigr)^2. \]
A hipótese treinada pode prever tempos para tamanhos não medidos. Entretanto, se o algoritmo real tiver comportamento quadrático ou se a máquina usada em produção for diferente, a classe linear ou a distribuição de treinamento pode ser inadequada.
3.13.12 Mapa da notação
| Símbolo | Significado |
|---|---|
| \(X\) | espaço de entradas |
| \(Y\) | espaço de saídas ou alvos |
| \(P\) | distribuição geradora dos pares \((X,Y)\) |
| \(D\) | amostra finita de treinamento |
| \(\mathcal{H}\) | classe de hipóteses |
| \(h\) | uma hipótese ou modelo candidato |
| \(\theta\) | parâmetros que determinam uma hipótese |
| \(\ell\) | perda em um exemplo |
| \(\widehat{R}_D\) | risco empírico calculado na amostra |
| \(R\) | risco esperado sob a distribuição \(P\) |
| \(A\) | algoritmo que transforma dados em hipótese |
3.13.13 Exercícios de fixação
- Para a classificação de spam, identifique \(X\), \(Y\), \(D\), uma classe \(\mathcal{H}\) e uma possível função de perda.
- Explique por que \(\ell\) costuma ter domínio \(\widehat{Y}\times Y\), e não \(X\times X\).
- Qual é a diferença entre \(\min_h\widehat{R}_D(h)\) e \(\operatorname{argmin}_h\widehat{R}_D(h)\)?
- Dê um exemplo em que a hipótese i.i.d. não seja razoável.
- Um modelo tem erro de treinamento igual a zero. Isso prova que seu risco esperado é zero? Justifique.
- Explique o papel de \(\lambda\) em um objetivo regularizado.
- No exemplo do tempo de execução, proponha uma classe de hipóteses adequada a um algoritmo cujo custo cresce como \(n^2\).
3.14 Formalização dos Exemplos
A notação abstrata da seção anterior torna-se mais clara quando a aplicamos a problemas concretos. Em cada exemplo precisamos definir não apenas \(X\), \(Y\) e a amostra \(D\), mas também a representação dos objetos, a classe de hipóteses, a perda e a distribuição na qual o sistema será usado.
Uma formalização é uma escolha de modelagem. O mesmo problema verbal pode originar modelos matemáticos diferentes. “Avaliar um pedido de crédito”, por exemplo, pode significar prever inadimplência, estimar prejuízo ou ordenar propostas por risco. Cada interpretação altera o espaço de saída e a função de perda.
3.14.1 Diagnóstico assistido como classificação binária
Suponha que desejamos estimar a presença de uma condição específica. Escolhemos \(d\) atributos clínicos e representamos uma pessoa por
\[ \mathbf{x}=(x_1,x_2,\ldots,x_d)\in X\subseteq\mathbb{R}^d. \]
As coordenadas podem incluir idade, medições laboratoriais e indicadores de sintomas. O espaço de saídas é
\[ Y=\{0,1\}, \]
com \(y=1\) para condição presente e \(y=0\) para ausente. A amostra é
\[ D_{\text{clin}} =\{(\mathbf{x}_i,y_i)\}_{i=1}^{N}, \]
obtida de registros para os quais existe um diagnóstico de referência.
Em vez de produzir diretamente uma classe, uma hipótese pode estimar
\[ h_\theta(\mathbf{x})\in[0,1], \]
interpretado como probabilidade da classe positiva. Uma regra de decisão converte essa pontuação em classe:
\[ \widehat{y} = \begin{cases} 1, & h_\theta(\mathbf{x})\geq\tau,\\ 0, & h_\theta(\mathbf{x})<\tau. \end{cases} \]
O limiar \(\tau\) deve refletir os custos de falsos negativos e falsos positivos. Uma perda ponderada pode atribuir custo \(c_{FN}\) ao primeiro e \(c_{FP}\) ao segundo.
Há ainda uma questão sobre \(P\): a população de treinamento corresponde à população futura? Um modelo treinado em um único hospital pode não generalizar para outros equipamentos, protocolos ou perfis demográficos.
3.14.2 Spam como classificação de texto
Uma mensagem é um objeto textual, mas muitos algoritmos recebem vetores numéricos. Fixamos um vocabulário
\[ V=\{w_1,w_2,\ldots,w_d\} \]
e usamos uma função de representação
\[ \phi\colon\text{mensagens}\to\mathbb{R}^d. \]
A coordenada de \(\phi(m)\) pode registrar a contagem ou a frequência de um termo. Assim,
\[ X=\phi(\text{mensagens})\subseteq\mathbb{R}^d, \qquad Y=\{0,1\}. \]
A amostra rotulada é
\[ D_{\text{spam}} =\{(\phi(m_i),y_i)\}_{i=1}^{N}. \]
Uma classe simples de hipóteses é formada por classificadores lineares:
\[ \mathcal{H} =\left\{ h_{\mathbf{w},b}(\mathbf{x}) =\mathbb{1}[\mathbf{w}^{\mathsf T}\mathbf{x}+b\geq0] \right\}. \]
\(\mathbb{1}[C]\) vale \(1\) quando a condição \(C\) é verdadeira e \(0\) caso contrário. Cada peso \(w_j\) mede como o termo correspondente influencia a pontuação.
A dimensão \(d\) pode ser muito grande, pois um vocabulário contém milhares de termos. Entretanto, cada mensagem utiliza apenas uma pequena fração deles; seus vetores são esparsos. Estruturas de dados esparsas armazenam somente coordenadas não nulas e economizam memória.
3.14.3 Risco de crédito: classe ou probabilidade
Representamos uma proposta por um vetor de atributos:
\[ \mathbf{x} =(\text{renda},\text{dívida},\text{prazo},\ldots) \in X\subseteq\mathbb{R}^d. \]
Para prever inadimplência em determinado horizonte,
\[ Y=\{0,1\} \]
e
\[ D_{\text{crédito}} =\{(\mathbf{x}_i,y_i)\}_{i=1}^{N}. \]
Se queremos uma probabilidade de inadimplência, usamos hipóteses \(h\colon X\to[0,1]\). A decisão de conceder crédito pode considerar o custo esperado:
\[ \operatorname{custo}(\mathbf{x}) =h(\mathbf{x})C_{\text{inadimplência}} +(1-h(\mathbf{x}))C_{\text{regular}}. \]
Essa separação é importante: previsão estima um resultado; decisão combina a previsão com custos, regras e restrições.
A amostra histórica possui um viés de seleção: geralmente observamos inadimplência apenas para propostas aprovadas. Formalmente, a distribuição observada pode ser
\[ P(X,Y\mid\text{crédito aprovado}), \]
enquanto o sistema será aplicado a \(P(X,Y\mid\text{nova proposta})\). Ignorar essa diferença compromete a validade da avaliação.
3.14.4 Desempenho esportivo: escolhendo um alvo mensurável
Considere um vetor de características de um atleta,
\[ \mathbf{x} =(\text{velocidade},\text{precisão},\text{resistência},\ldots) \in\mathbb{R}^d. \]
Se o alvo for “convocado ou não convocado”, então \(Y=\{0,1\}\) e podemos treinar com decisões passadas. Contudo, esse rótulo representa escolhas de comissões técnicas, não uma propriedade física objetiva.
Uma alternativa é prever uma estatística futura, como número de ações bem-sucedidas por partida:
\[ Y=\mathbb{R}_{\geq0}. \]
Nesse caso temos regressão e podemos usar perda absoluta,
\[ \ell(h(\mathbf{x}),y)=|h(\mathbf{x})-y|, \]
que penaliza proporcionalmente a magnitude do erro e é menos sensível a valores extremos do que a perda quadrática.
Também precisamos respeitar a ordem temporal. Atributos de uma temporada posterior não podem ser usados para prever um resultado anterior. Uma divisão aleatória ingênua pode colocar medições do mesmo atleta e período tanto no treino quanto no teste, superestimando a generalização.
3.14.5 Reconhecimento de algarismos
Uma imagem com \(28\times28\) pixels em tons de cinza pode ser vetorizada:
\[ X=[0,1]^{784}. \]
O alvo é uma entre dez classes:
\[ Y=\{0,1,2,\ldots,9\}. \]
A amostra é
\[ D_{\text{dígitos}} =\{(\mathbf{x}_i,y_i)\}_{i=1}^{N}. \]
Uma hipótese pode produzir um vetor de probabilidades
\[ h(\mathbf{x}) =(p_0,p_1,\ldots,p_9), \qquad p_k\geq0, \quad \sum_{k=0}^{9}p_k=1. \]
Nesse caso, \(\widehat{Y}\) é o simplex de probabilidades, enquanto \(Y\) é o conjunto de classes. A classe prevista é \(\operatorname{argmax}_k p_k\). Essa distinção explica por que previsão e alvo nem sempre pertencem ao mesmo conjunto.
3.14.6 Previsão de demanda como regressão
Para prever a demanda de um produto na semana seguinte, a entrada pode reunir vendas recentes, preço, promoção e calendário:
\[ \mathbf{x}_t\in X\subseteq\mathbb{R}^d, \qquad y_t\in Y=\mathbb{R}_{\geq0}. \]
A amostra temporal é
\[ D_{\text{demanda}} =\{(\mathbf{x}_t,y_t)\}_{t=1}^{T}. \]
Os índices \(t\) lembram que os exemplos não são necessariamente independentes. Uma classe linear pode servir como ponto de partida:
\[ h_{\mathbf{w},b}(\mathbf{x}) =\mathbf{w}^{\mathsf T}\mathbf{x}+b. \]
Como a saída real não pode ser negativa, podemos restringir a previsão usando \(\max\{0,h(\mathbf{x})\}\) ou escolher uma família de modelos com saídas não negativas.
3.14.7 Visão comparativa
| Problema | \(X\) | \(Y\) | Previsão \(\widehat{Y}\) | Observação crítica |
|---|---|---|---|---|
| Diagnóstico | atributos clínicos | \(\{0,1\}\) | probabilidade em \([0,1]\) | custos dos erros diferem |
| Spam | vetores textuais esparsos | \(\{0,1\}\) | classe ou probabilidade | vocabulário muda com o tempo |
| Crédito | atributos financeiros | \(\{0,1\}\) | probabilidade | dados observados são seletivos |
| Esporte | medições de desempenho | classe ou valor real | depende do alvo | rótulo pode não representar mérito |
| Algarismos | \([0,1]^{784}\) | dez classes | vetor de dez probabilidades | variação visual |
| Demanda | histórico e contexto | \(\mathbb{R}_{\geq0}\) | valor real | dependência temporal |
O quadro evidencia que escrever \(X=\mathbb{R}^d\) é apenas o começo. É preciso explicar o significado das coordenadas, a origem de \(Y\), a população representada por \(P\) e o custo codificado por \(\ell\).
3.14.8 Dimensão e geometria
Quando \(X\subseteq\mathbb{R}^2\), podemos desenhar cada exemplo como um ponto no plano. Em três dimensões ainda há uma visualização direta. Para \(d>3\), a interpretação geométrica continua válida, embora não possamos desenhar todo o espaço de forma literal.
Um e-mail representado por \(50\,000\) termos é um ponto em \(\mathbb{R}^{50\,000}\). A dimensão elevada não impede o uso de conceitos como distância, produto interno, hiperplano e região de decisão. Grande parte da aprendizagem de máquina consiste em estender a intuição geométrica para esses espaços.
Entretanto, atributos em escalas diferentes podem distorcer a geometria. Se renda é medida em milhares e uma proporção varia entre \(0\) e \(1\), distâncias e produtos internos podem ser dominados pela renda. Normalização e padronização são etapas importantes de representação.
3.14.9 Checklist de formalização
Antes de treinar um modelo, devemos conseguir preencher:
- \(X\): quais entradas são permitidas e como são representadas?
- \(Y\): qual é o alvo observado?
- \(\widehat{Y}\): qual objeto o modelo realmente produz?
- \(D\): como a amostra foi coletada e rotulada?
- \(P\): qual população ou processo futuro queremos representar?
- \(\mathcal{H}\): quais funções o algoritmo pode escolher?
- \(\ell\): quais erros recebem maior penalidade?
- \(A\): como uma hipótese será escolhida?
- avaliação: como estimaremos desempenho fora da amostra?
Se algum item não puder ser respondido, o problema ainda não está suficientemente definido para que a escolha de um algoritmo seja a principal preocupação.
3.14.10 Exercícios de fixação
- Formalize um sistema de previsão de evasão escolar especificando \(X\), \(Y\), \(D\), \(\widehat{Y}\) e uma perda.
- No reconhecimento de algarismos, por que \(Y\) e \(\widehat{Y}\) podem ser conjuntos diferentes?
- Explique o viés de seleção presente nos dados históricos de crédito.
- Escreva uma hipótese linear para spam com três atributos e interprete cada peso.
- Proponha dois alvos diferentes para análise esportiva e diga qual tipo de tarefa cada um produz.
- Para demanda, explique por que uma divisão temporal é preferível a embaralhar todos os exemplos.
- Escolha um dos casos e descreva uma mudança em \(P\) que poderia degradar o modelo após a implantação.
3.15 Pontuação
Muitos classificadores começam calculando uma pontuação numérica. A entrada é um vetor de atributos
\[ \mathbf{x}=(x_1,x_2,\ldots,x_d)\in\mathbb{R}^d, \]
e cada coordenada recebe um peso que expressa sua contribuição para a decisão. A pontuação linear é
\[ s(\mathbf{x}) =\mathbf{w}^{\mathsf T}\mathbf{x}+b =w_1x_1+w_2x_2+\cdots+w_dx_d+b. \]
\(\mathbf{w}=(w_1,\ldots,w_d)\) é o vetor de pesos e \(b\) é o viés (bias). O nome “viés” aqui designa um parâmetro do modelo e não deve ser confundido com viés estatístico ou discriminação nos dados.
Uma regra binária simples atribui a classe positiva quando a pontuação é não negativa:
\[ h_{\mathbf{w},b}(\mathbf{x}) = \begin{cases} +1, & s(\mathbf{x})\geq0,\\ -1, & s(\mathbf{x})<0. \end{cases} \]
Essa função também pode ser escrita como
\[ h_{\mathbf{w},b}(\mathbf{x}) =\operatorname{sign}(\mathbf{w}^{\mathsf T}\mathbf{x}+b). \]
3.15.1 Pesos e atributos
O sinal de um peso indica a direção de sua influência, mantendo os demais atributos fixos:
- \(w_j>0\): aumentar \(x_j\) aumenta a pontuação;
- \(w_j<0\): aumentar \(x_j\) diminui a pontuação;
- \(w_j=0\): o atributo não afeta diretamente a pontuação.
A magnitude \(|w_j|\) indica a sensibilidade da pontuação à coordenada \(x_j\), mas sua interpretação depende da escala. Um peso de \(0{,}1\) aplicado a uma variável medida em milhares pode contribuir mais do que um peso \(10\) aplicado a uma proporção entre \(0\) e \(1\). Portanto, comparar pesos só é informativo quando conhecemos as unidades ou padronizamos os atributos.
O termo \(b\) desloca a fronteira de decisão. Podemos interpretar a regra usando um limiar \(\tau\):
\[ \mathbf{w}^{\mathsf T}\mathbf{x}\geq\tau. \]
As duas formas são equivalentes quando \(b=-\tau\).
3.15.2 Exemplo numérico
Considere três perfis fictícios descritos por dois atributos já normalizados:
- \(x_1\): medida de desempenho técnico;
- \(x_2\): medida de consistência.
Usaremos a pontuação
\[ s(\mathbf{x})=0{,}6x_1+0{,}8x_2-5. \]
Os pesos mostram que, nessa regra específica, uma unidade adicional de consistência contribui \(0{,}8\), enquanto uma unidade de desempenho técnico contribui \(0{,}6\).
| Perfil | \(x_1\) | \(x_2\) | Pontuação \(s(\mathbf{x})\) | Classe |
|---|---|---|---|---|
| A | 4 | 5 | \(0{,}6(4)+0{,}8(5)-5=1{,}4\) | \(+1\) |
| B | 7 | 2 | \(0{,}6(7)+0{,}8(2)-5=0{,}8\) | \(+1\) |
| C | 4 | 2 | \(0{,}6(4)+0{,}8(2)-5=-1{,}0\) | \(-1\) |
O cálculo é determinístico: fixados \(\mathbf{w}\) e \(b\), qualquer vetor recebe uma pontuação e uma classe. O aprendizado consiste em escolher esses parâmetros a partir dos exemplos, e não em calcular a soma depois que os parâmetros já são conhecidos.
3.15.3 Interpretação geométrica
Os pontos para os quais a pontuação é exatamente zero formam a fronteira de decisão:
\[ \mathbf{w}^{\mathsf T}\mathbf{x}+b=0. \]
Em duas dimensões, essa fronteira é uma reta. Em três dimensões, é um plano. Em \(d\) dimensões, é um hiperplano. De um lado estão os pontos com pontuação positiva; do outro, os pontos com pontuação negativa.
O vetor \(\mathbf{w}\) é perpendicular ao hiperplano e aponta para o lado em que a pontuação aumenta. Se multiplicarmos \(\mathbf{w}\) e \(b\) pelo mesmo número positivo, a fronteira e as classes não mudam, embora os valores das pontuações sejam escalados.
No exemplo,
\[ 0{,}6x_1+0{,}8x_2-5=0 \]
pode ser isolada como
\[ x_2=6{,}25-0{,}75x_1. \]
Essa equação permite desenhar a reta e verificar visualmente a região de cada perfil.
3.15.4 Distância assinada à fronteira
A pontuação bruta depende da escala dos pesos. Dividindo-a pela norma de \(\mathbf{w}\), obtemos a distância assinada do ponto ao hiperplano:
\[ d(\mathbf{x}) =\frac{\mathbf{w}^{\mathsf T}\mathbf{x}+b}{\|\mathbf{w}\|_2}. \]
O sinal informa o lado da fronteira; o módulo fornece a distância perpendicular. No exemplo,
\[ \|\mathbf{w}\|_2 =\sqrt{0{,}6^2+0{,}8^2}=1, \]
portanto a pontuação coincide numericamente com a distância assinada.
Pontos próximos da fronteira são mais sensíveis a pequenas alterações dos atributos ou dos parâmetros. Entretanto, uma distância grande não é automaticamente uma probabilidade alta; ela apenas expressa separação geométrica no modelo linear.
3.15.5 Pontuação não é probabilidade
\(s(\mathbf{x})\) pode assumir qualquer valor real e não precisa estar entre \(0\) e \(1\). Para obter uma quantidade interpretável como probabilidade, podemos aplicar uma função logística:
\[ p(\mathbf{x}) =\sigma(s(\mathbf{x})) =\frac{1}{1+e^{-s(\mathbf{x})}}. \]
Essa transformação preserva a ordem das pontuações: se \(s(\mathbf{x}_a)>s(\mathbf{x}_b)\), então \(p(\mathbf{x}_a)>p(\mathbf{x}_b)\). Contudo, interpretar \(p\) como probabilidade confiável exige treinamento e calibração apropriados.
Uma pontuação também pode ser usada apenas para ranquear elementos. Um mecanismo de busca, por exemplo, ordena documentos por relevância sem necessariamente converter cada valor em uma classe.
3.15.6 Aprendendo os pesos
Dada uma amostra
\[ D=\{(\mathbf{x}_i,y_i)\}_{i=1}^{N}, \qquad y_i\in\{-1,+1\}, \]
queremos escolher \(\mathbf{w}\) e \(b\) para produzir boas previsões. Uma condição de classificação correta é
\[ y_i(\mathbf{w}^{\mathsf T}\mathbf{x}_i+b)>0. \]
Quando os dados são linearmente separáveis, existe ao menos um hiperplano que classifica corretamente todos os exemplos de treinamento. Isso não garante que a mesma fronteira terá bom desempenho em dados futuros, nem que todos os conjuntos reais sejam separáveis.
O perceptron, estudado adiante, ajusta os pesos quando encontra um exemplo classificado incorretamente. A regressão logística utiliza uma perda diferenciável e produz pontuações transformadas pela função logística. Máquinas de vetores de suporte procuram uma fronteira com margem ampla. Esses métodos compartilham a estrutura linear, mas possuem objetivos de treinamento diferentes.
3.15.7 Código de uma pontuação linear
Uma implementação direta em Python é:
def pontuacao(x, w, b):
return sum(x_j * w_j for x_j, w_j in zip(x, w)) + b
def classificar(x, w, b):
return 1 if pontuacao(x, w, b) >= 0 else -1
w = [0.6, 0.8]
b = -5.0
print(classificar([4, 5], w, b)) # 1
print(classificar([4, 2], w, b)) # -1Em bibliotecas numéricas, o produto interno costuma ser calculado de forma vetorizada. Para uma matriz \(X\in\mathbb{R}^{N\times d}\) contendo \(N\) exemplos nas linhas, todas as pontuações são
\[ \mathbf{s}=X\mathbf{w}+b\mathbf{1}. \]
Essa forma evita um laço explícito por exemplo e aproveita implementações eficientes de álgebra linear.
3.15.8 Limitações e cuidados
Uma fronteira linear é simples e interpretável, mas não representa qualquer padrão. Se a classe positiva formar um círculo cercado pela classe negativa, nenhuma reta separará os grupos perfeitamente no espaço original. Podemos então criar novos atributos, aplicar uma transformação ou escolher uma classe de hipóteses não linear.
Além disso, um peso aprendido representa associação dentro dos dados e do modelo; não prova causalidade. Atributos sensíveis ou variáveis que funcionam como substitutas podem produzir decisões injustas. Em aplicações que afetam pessoas, é necessário avaliar desempenho entre grupos, documentar limitações e permitir revisão adequada.
Encontrar pesos que classificam perfeitamente os exemplos de treinamento demonstra ajuste à amostra, não generalização. A fronteira precisa ser avaliada em dados independentes e representativos da população de uso.
3.15.9 Exercícios de fixação
- Calcule a pontuação dos três perfis usando \(s(\mathbf{x})=x_1+x_2-6\) e determine suas classes.
- Reescreva a regra \(2x_1-3x_2\geq4\) na forma \(\mathbf{w}^{\mathsf T}\mathbf{x}+b\geq0\).
- Para \(\mathbf{w}=(3,4)\) e \(b=-10\), calcule \(\|\mathbf{w}\|_2\) e a distância assinada do ponto \((2,2)\) à fronteira.
- Explique por que multiplicar \(\mathbf{w}\) e \(b\) por \(5\) não altera as classes, mas altera as pontuações.
- Dê um exemplo de conjunto de pontos em \(\mathbb{R}^2\) que não seja linearmente separável.
- Qual é a diferença entre uma pontuação, uma classe e uma probabilidade calibrada?
- Implemente a versão vetorizada da pontuação para vários exemplos usando uma biblioteca numérica.
3.16 Exercícios de múltipla escolha
As questões a seguir retomam os principais conceitos do capítulo. Em cada uma, assinale apenas uma alternativa. Procure justificar sua escolha antes de consultar o gabarito.
Se \(A=\{1,2,3\}\) e \(B=\{3,4\}\), qual é o conjunto \(A\cap B\)?
- \(\{1,2,4\}\)
- \(\{3\}\)
- \(\{1,2,3,4\}\)
- \(\varnothing\)
- \(\{1,2,4\}\)
Uma função \(f:A\to B\) é injetiva quando:
- todo elemento de \(B\) possui exatamente uma pré-imagem.
- elementos distintos de \(A\) sempre produzem imagens distintas.
- sua imagem é necessariamente igual a \(A\).
- seu domínio contém apenas números reais.
- todo elemento de \(B\) possui exatamente uma pré-imagem.
Para que uma função \(f:A\to B\) possua uma inversa \(f^{-1}:B\to A\), ela deve ser:
- constante.
- apenas injetiva.
- bijetiva.
- apenas sobrejetiva.
- constante.
Qual é a representação binária do número decimal \(13\)?
- \(1011_2\)
- \(1100_2\)
- \(1101_2\)
- \(1110_2\)
- \(1011_2\)
Um byte contém:
- 2 bits.
- 4 bits.
- 8 bits.
- 16 bits.
- 2 bits.
Em complemento de dois com 8 bits, o intervalo de inteiros representáveis é:
- de \(-127\) a \(127\).
- de \(-128\) a \(127\).
- de \(-128\) a \(128\).
- de \(0\) a \(255\).
- de \(-127\) a \(127\).
Em um problema supervisionado, o conjunto de treinamento contém:
- somente entradas sem qualquer informação de saída.
- pares de entrada e saída-alvo.
- apenas regras escritas por um programador.
- somente ações e recompensas futuras.
- somente entradas sem qualquer informação de saída.
Qual alternativa descreve uma tarefa de regressão?
- Decidir se uma mensagem é spam.
- Agrupar clientes sem rótulos prévios.
- Prever o consumo mensal de energia em kWh.
- Reconhecer qual algarismo aparece em uma imagem.
- Decidir se uma mensagem é spam.
Na pontuação linear \(s(\mathbf{x})=\mathbf{w}^{\mathsf T}\mathbf{x}+b\), o vetor \(\mathbf{w}\) determina principalmente:
- a orientação da fronteira de decisão.
- o número de exemplos da amostra.
- a base numérica usada pelo computador.
- a probabilidade exata de qualquer classe.
- a orientação da fronteira de decisão.
Obter erro zero nos dados de treinamento significa necessariamente que:
- o modelo terá erro zero em produção.
- o problema é não supervisionado.
- a hipótese ajustou a amostra, mas ainda precisa ter sua generalização avaliada.
- todos os pesos do modelo são iguais a zero.
- o modelo terá erro zero em produção.
- b. A interseção contém somente os elementos presentes nos dois conjuntos; neste caso, apenas \(3\).
- b. Injetividade impede que duas entradas distintas sejam associadas à mesma saída.
- c. A inversa definida em todo o contradomínio exige injetividade e sobrejetividade, isto é, bijetividade.
- c. \(13=8+4+1\), portanto seus bits são \(1101_2\).
- c. Por definição, um byte possui 8 bits.
- b. Com \(n\) bits em complemento de dois, o intervalo é \([-2^{n-1},2^{n-1}-1]\).
- b. O aprendizado supervisionado utiliza exemplos nos quais a saída-alvo acompanha a entrada.
- c. O consumo é uma quantidade numérica contínua; as alternativas a e d são classificações, e b é agrupamento.
- a. \(\mathbf{w}\) é normal ao hiperplano e, por isso, controla sua orientação; \(b\) controla o deslocamento.
- c. Erro de treinamento mede ajuste aos exemplos observados, não garante desempenho em dados novos.